簡體   English   中英

處理最大獨立和依賴異步/等待作業的正確方法(承諾)

[英]Correct way to handle max of independent and dependent async/await jobs (Promises)

我有四個從不同來源獲取的異步進程,即進程 A、B、C 和 D。

進程 A、B 和 C 相互獨立,但 D 依賴於來自 C 的數據。

盡可能地,我希望 A 和 B 在 C 和 D 上獨立獲取,但我想保留 A、B、C 和 D 的結果以用於后面的過程。

所以我試圖想出正確的方式來表達這個功能。

就像是

const results = await Promise.allSettled([A, B, C]);
const resultD = await D(results[2].value);

意味着我正在等待執行 D,直到 A、B、C 全部完成,但在這種情況下,A 或 B 可能比 C 花費更多的時間。

同樣地,

const results = await Promise.allSettled([A, B, C, D(await C)]);

好像不太對勁? 我不希望 C 執行兩次,我也想保留結果。

優雅地解決這個問題的正確方法是什么?

您可以將CD組合在一起並使用AB解決它。

讓我們理解下面的片段:

考慮函數ABCD等價於從四個不同的 API 獲取。 另外,請注意D如何需要一些數據,這些數據將從C獲得。

main函數中,我們獨立解析AB ,並且只有在C完成后才解析D

 const sleep = (delay, data) => new Promise(res => setTimeout(() => res(data), delay)); const A = () => sleep(100).then(() => "A") const B = () => sleep(200).then(() => "B") const C = () => sleep(100).then(() => "C") const D = (inp) => sleep(100).then(() => inp + "D") function main() { const promises = [A(), B(), C().then(res => D(res))]; Promise.all(promises).then(console.log); } main();

您也可以使用Promise.allSettled但請確保您了解allSettledall之間的區別。

暫無
暫無

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

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