[英]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 執行兩次,我也想保留結果。
優雅地解決這個問題的正確方法是什么?
您可以將C
和D
組合在一起並使用A
和B
解決它。
讓我們理解下面的片段:
考慮函數A
、 B
、 C
和D
等價於從四個不同的 API 獲取。 另外,請注意D
如何需要一些數據,這些數據將從C
獲得。
在main
函數中,我們獨立解析A
, B
,並且只有在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
但請確保您了解allSettled
和all
之間的區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.