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
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 次 | 
| 最近记录: |