【问题标题】: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'));

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 2019-05-31
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      相关资源
      最近更新 更多