function fakeAjax(url, cb) {
var fake_responses = {
file1: 'The first text',
file2: 'The middle text',
file3: 'The last text'
};
var randomDelay = (Math.round(Math.random() * 1e4) % 8000) + 1000;
console.log('Requesting: ' + url);
setTimeout(function() {
cb(fake_responses[url]);
}, randomDelay);
}
function output(text) {
console.log(text);
}
const getFile = file => new Promise(resolve => fakeAjax(file, resolve));
function* getFiles() {
const p1 = getFile('file1');
const p2 = getFile('file2');
const p3 = getFile('file3');
output(yield p1);
output(yield p2);
output(yield p3);
output('Completed');
}
const runner = genFn => {
const itr = genFn();
const run = arg => {
let result = itr.next(arg);
if (result.done) {
return result.value;
} else {
return Promise.resolve(result.value).then(run);
}
};
return run();
};
runner(getFiles);