延迟承诺链解决方案



我尝试依次执行诺言,但定时出现问题...

执行以下代码时,我立即得到了五个响应"我是XXX,我得到了YY",在2秒钟后,我收到了"成功"消息。

我想要的是首先收到消息"我是xxx,我得到了2秒钟,然后成功。

有什么想法吗?

"use strict";
Promise.resolve()
  .then(doStuff)
  .then(function () {
    console.log("Success");
})
function doStuff() {
  let item = [1, 2, 3, 4, 5, 6];
  // Construction du tableau de promises
  let array = item.map(i => {
    let pro =  new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("Item " + i);
        }, 2000 );
      });
    pro.custom = i;
    return pro;
  });
  let pro = array.reduce((p, item) => {
      return p.then((val) => {
        console.log("I'm " + item.custom + " and I get " + val);
        return Date.now();
      });
  }, Promise.resolve());
  return pro;
}

(对我的英语差而抱歉)。

当前,所有延迟都是同时启动的,这就是为什么它们都立即完成,以及为什么在Success消息中有一个2秒的延迟延迟

如果您更改dostuff如下,则输出应相同,但数组中的项目之间有2秒的延迟

function doStuff() {
  let item = [1, 2, 3, 4, 5, 6];
  let delay = timeout => new Promise(resolve => setTimeout(resolve, timeout));
  return item.reduce((p, val, i) => 
    p
    .then(() => delay(2000))
    .then(() => {
        console.log("I'm " + i + " and I get " + val);
        return Date.now();
    }), Promise.resolve());
}

最新更新