簡體   English   中英

在 Promise.all() 中附加 .then() 的 Promise

[英]Promise attached with .then() in Promise.all()

我對承諾的解決感到困惑。 如果我創建了一個 Promise 數組並為它們提供了一個 .then() ,如下所示..

// assume async() returns a promise that resolves with the number 5. 
promiseArray = [];
for (let i = 0; i < 5; i++){
promiseArray.push(async(5).then(() => console.log("done")));
}
Promise.all(promiseArray).then(() => console.log("all done"));

我對這里發生的事情感到困惑。 承諾是否在 Promise.all() 完成之前開始控制台日志記錄“完成”? Promise.all() 的 .then() 是一個單獨的 .then() ,它只會在所有承諾都解決后運行嗎?

從所有單個 promise 中刪除 .then() 而是在 Promise.all() 的 .then() 中執行此代碼,如下所示有什么區別? 是否有任何性能權衡?

// assume async() returns a promise that resolves with the number 5. 
promiseArray = [];
for (let i = 0; i < 5; i++){
promiseArray.push(async(5));
}
Promise.all(promiseArray).then((resolves) => resolves.forEach(console.log("done")));

承諾是否在 Promise.all() 完成之前開始控制台日志記錄“完成”? Promise.all() 的 .then() 是一個單獨的 .then() ,它只會在所有承諾都解決后運行嗎?

這是正確的。 被推送到數組的 Promises它們的done被記錄都會解析,因此在 Promises 數組上調用Promise.all將導致all done在每個done被記錄后總是被記錄。

從所有單個 promise 中刪除 .then() 而是在 Promise.all() 的 .then() 中執行此代碼,如下所示有什么區別? 是否有任何性能權衡?

主要區別在於,在第一種方法中, done可以在其先前的 Promise 完成后立即記錄。 相比之下,在第二種方法中:

Promise.all(promiseArray).then((resolves) => resolves.forEach(

上面,所有 Promise必須在開始再次迭代之前解析。

這很可能是一個重要因素。 例如,假設您必須為每個 Promise 結果執行 CPU 密集型計算。 在這種情況下,采用第二種方法肯定是更好的選擇,因為這樣您就可以在等待其他 Promise 解析的同時執行其中的一些計算,而不是在開始第一次計算之前等待所有Promise 解析.

下面是一個示例,其中使用第二種方法比第一種方法有了實質性的改進。 當計算成本很高時,將它們鏈接到單個 Promises 上,而不是在Promise.all

(如果要在單個 Promise 之后運行的代碼並不昂貴,那么沒關系 - 您可以選擇您認為最易讀的方法)

暫無
暫無

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

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