簡體   English   中英

承諾鏈解決的延遲

[英]Delay in Promises chain resolution

我嘗試順序執行諾言,但時間安排出了點問題...

當我執行以下代碼時,我立即得到五個響應“我是XXX,我得到YY”,兩秒鍾后,我收到了“成功”消息。

我想要的是首先獲取消息“我是XXX,我得到YY”,間隔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;
}

(對不起,我的英語不好)。

當前,所有延遲都在同一時間開始,這就是為什么它們一次都匆忙結束的原因,以及為什么doStuff和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());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM