繁体   English   中英

在没有Promise.all的情况下等待多方承诺时如何使用try-catch?

[英]How to use try-catch when awaiting mutiple promises without Promise.all?

我需要执行以下操作:

let promise1 = getPromise1();
let promise2 = getPromise2();
let promise3 = getPromise3();

// some more code
...

result1 = await promise1;
// work with result1 in specific way

result2 = await promise2;
// work with result2 in specific way

result3 = await promise3;
// work with result3 in specific way

由于我需要对每个结果执行非常独特的操作,因此我不想使用Promise.all,因为它会导致某些讨厌的if-else结构。

我的问题是try{}catch(){}块在哪里放置? 即使其中一个承诺错误,我也不希望它影响其他错误。 无论如何,他们必须完成执行。 我应该将单个resultX包装在try{}还是将let promiseX =...包装。 或两者?

您是否有更好的设计模式?

谢谢!

就像您提到的那样,如果要分别使用不同的Promise,可以将它们包装在它们自己的try/catch块中。


let result1 = []; // for simplicity

try {
  result1 = await getPromise1()
} catch (error) {
  console.log(`Error occured: ${error}`);
  // fallback
  result1 = someComplicatedOperationHere();
}

您可以对其他n诺言遵循类似的方法,最后将得到一个result1 .. resultN都包含某些内容。 成功的结果,或回退的结果(或您希望处理的结果)。

但是,请注意,如果您使用await并有多个不同的promise调用,则将为您的应用程序同步获取它们。 含义:他们将(a)wait第一个诺言返回,然后继续前进。

如果您不希望这样做,则必须使用Promise.all (经典await in for loop问题。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM