tom*_*894 6 javascript node.js async-await
我最近一直在阅读有关 async/await 并使用 try 和 catch 来处理承诺拒绝的内容,并将其应用于我的一些旧代码。
我有以下几点:
async function() {
try {
await Promise.all([some functions]);
doIfNoError();
} catch (error) {
console.log(error);
}
Run Code Online (Sandbox Code Playgroud)
我传递给 Promise.all 的函数遵循以下形式:
async function() {
some code
if (some condition) {
return true
} else {
throw false
}
}
Run Code Online (Sandbox Code Playgroud)
我打算如果任何传递给 Promise.all 的函数被拒绝,就会显示拒绝。如果没有一个函数拒绝,那么 doIfNoError 应该触发。但是,doIfNoError 有时会在不应该触发时触发,并且我会收到错误“未处理的承诺拒绝”。
事实上,try/catch
没有工作也有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();
Run Code Online (Sandbox Code Playgroud)
1) throw false
\xe2\x80\x93 这没有意义,你不应该抛出一个布尔值,而应该抛出一个实例Error
。
2)catch
仅在抛出错误或promise被“拒绝”时触发(注意:reject和throw与async-await具有相同的效果)。相比之下:“解析”布尔值为 的 Promisefalse
不会被 async-await 解释为异常。因此,如果您希望 catch 块启动,请确保您出现throw
错误或拒绝reject
承诺。如果您将异常作为参数传递给拒绝,例如 ( Promise.reject(new Error("Something went wrong"))
。
除了我上面提到的之外,您的代码看起来不错。
\n 归档时间: |
|
查看次数: |
10789 次 |
最近记录: |