Created
October 12, 2019 01:32
-
-
Save cScarlson/c70d97c142747d60c5cf36fd97b15aa9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
clear(); | |
var http = { | |
get(url) { | |
var delay = Math.floor( Math.random() * 10 ), even = !(delay % 2); | |
var xhr = new Promise(exe); | |
console.log(`REQUEST`, url, delay); | |
xhr.then( (data) => console.log(`SUCCESS: `, data) ).catch( (data) => console.log(`FAILURE: `, data) ); | |
function exe(resolve, reject) { | |
var action = { 'true': reject, 'false': resolve }[ even ]; | |
setTimeout( () => action({ url, delay }), (1000 * delay) ); | |
} | |
return xhr; | |
} | |
}; | |
var SequentialPromise = new (function SequentialPromise() { | |
var PRIVATE = this; | |
return class SequentialPromise { | |
constructor(context, action) { | |
this.index = 0; | |
this.requests = [ ]; | |
this.context = context; | |
this.action = action; | |
return this; | |
} | |
log() {} | |
execute(url, ...more) { | |
var { context, action, requests } = this; | |
var chain = context[action](url); | |
requests.push(chain); | |
chain.then( (data) => this.index += 1 ); | |
if (more.length) return chain.then( () => this.execute(...more) ); | |
return chain; | |
} | |
}; | |
})(); | |
var sequence = new SequentialPromise(http, 'get'); | |
var urls = [ | |
'url/name/space/0', | |
'url/name/space/1', | |
'url/name/space/2', | |
'url/name/space/3', | |
'url/name/space/4', | |
'url/name/space/5', | |
'url/name/space/6', | |
'url/name/space/7', | |
'url/name/space/8', | |
'url/name/space/9' | |
]; | |
var chain = sequence.execute(...urls); | |
var promises = sequence.requests; | |
chain.catch( () => console.warn(`EXECUTION STOPPED at ${sequence.index} for ${urls[sequence.index]}`) ); | |
// console.log('>', chain, promises); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment