我需要执行以下操作:
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 =...
包装。还是两者都有?
您是否有更好的设计模式?
谢谢!
答案 0 :(得分:0)
就像您提到的那样,如果您想分别处理不同的承诺,则可以将它们包装在自己的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
类问题。)