[英]Using Try/Catch with Promise.all
我最近一直在阅读有关 async/await 并使用 try 和 catch 来处理承诺拒绝的内容,并将其应用于我的一些旧代码。
我有以下几点:
async function() {
try {
await Promise.all([some functions]);
doIfNoError();
} catch (error) {
console.log(error);
}
我传递给 Promise.all 的函数遵循以下形式:
async function() {
some code
if (some condition) {
return true
} else {
throw false
}
}
我打算如果任何传递给 Promise.all 的函数被拒绝,就会显示拒绝。 如果没有一个函数拒绝,那么 doIfNoError 应该触发。 但是,doIfNoError 有时会在不应该触发时触发,并且我会收到错误“未处理的承诺拒绝”。
实际上, try/catch
与Promise.all()
配合Promise.all()
很好。
这是一个片段来证明它:
async function p1() { return 1; } async function boom() { throw new Error('boom'); } // expected output: 'boom', ["value before Promise.all"] async function asyncCall() { let all = ['value before Promise.all']; try { all = await Promise.all([p1(), boom()]); } catch(e) { console.log(e.message); } console.log(JSON.stringify(all)); } asyncCall();
尝试充分发挥 Promise 的潜力,其中包括一个用于被拒绝的 Promise 的 catch 块。 请注意,如果doIfNoError
也抛出错误,它将被catch
。
async function() {
await Promise.all([some promises])
.then(doIfNoError) // Promise.all resolved
.catch(console.log) // Promise.all has at least one rejection
}
promiseAll = async (promises) => { await Promise.all(promises) .then(doIfNoError) // Promise.all resolved .catch(console.log) // Promise.all has at least one rejection } doIfNoError = () => console.log('No errors'); promiseAll([Promise.resolve(), 1, true, () => (false)]); promiseAll([Promise.resolve(), 1, true, Promise.reject('rejected: because reasons'), Promise.resolve()]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.