【问题标题】:how to sequence varying function calls with promises with a queue如何使用带有队列的承诺对不同的函数调用进行排序
【发布时间】:2019-04-26 11:03:03
【问题描述】:
我有一个返回承诺的函数
function ajax() { sideeffect(); return new Promise() }
我在不同的时间调用这个函数,我想要的是这个函数对调用进行排队,并且只在上一个调用解决后运行。
如果我连续三次调用ajax ajax(); ajax(); ajax() 我希望这是
ajax.then(ajax).then(ajax) 或者如果我调用四次,它会相应地链接。
【问题讨论】:
标签:
javascript
ajax
promise
【解决方案1】:
创建一个表示最后创建的 Promise 的持久变量,在调用 ajax 时链接到它,将持久变量重新分配给新链,并返回新链:
let lastProm = Promise.resolve();
function ajax(ms) {
// sideeffect();
lastProm = lastProm.then(() => (
new Promise(resolve => setTimeout(resolve, ms))
));
return lastProm;
}
ajax(1000).then(() => console.log('resolved 1'));
ajax(1000).then(() => console.log('resolved 2'));
ajax(3000).then(() => console.log('resolved 3'));
ajax(1000).then(() => console.log('resolved 4'));