Smi*_*row 9 javascript asynchronous node.js async-await
我有一些问题要处理"并行"中的多次拒绝.当我们"等待并行"时,如何处理异步函数中的拒绝.
这是一个例子:
function in_2_sec(number) {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject('Error ' + number);
}, 2000);
})
}
async function f1() {
try {
let a = in_2_sec(3);
let b = in_2_sec(30);
return await a + await b; // awaiting in "parallel"
} catch(err) {
console.log('Error', err);
return false;
}
}
async function f2() {
try {
let a = await Promise.all([in_2_sec(3), in_2_sec(30)]);
return a[0] + a[1];
} catch(err) {
console.log('Error', err);
return false;
}
}
// f1().then(console.log) // UnhandledPromiseRejectionWarning
// f2().then(console.log) // Nice
Run Code Online (Sandbox Code Playgroud)
f1()创建一个UnhandledPromiseRejectionWarningin节点,因为没有处理第二次拒绝(b).
f2()完美的工作,Promise.all()诀窍,但如何f2()只用async/await语法,没有Promise.all()?
f2()完美的工作,Promise.all()诀窍,但如何f2()只用async/await语法,没有Promise.all()?
一点也不.用Promise.all!这就是它的目的.不要想到async/ await取代承诺 - 你仍在使用它们,它只是then电话的语法糖.没有句法替代Promise.all.
当然,也可以重新实现Promise.all自己的行为(依赖于Promise构造函数和.then原语),但你真的不想这样做(存在太多陷阱).
| 归档时间: |
|
| 查看次数: |
2984 次 |
| 最近记录: |