javascript – Promise.all中的错误处理,如async / await语法中的流程

前端之家收集整理的这篇文章主要介绍了javascript – Promise.all中的错误处理,如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()在节点中创建UnhandledPromiseRejectionWarning,因为不处理第二次拒绝(b).
f2()工作得很好,Promise.all()可以做到这一点,但是如何在没有Promise.all()的情况下使用async / await语法创建一个f2()?

解决方法

f2() works perfectly,Promise.all() do the trick,but how to make a f2() with only async/await Syntax,without Promise.all()?

一点也不.使用Promise.all!这就是它的目的.不要想到异步/等待替换承诺 – 你仍在使用它们,它只是后来调用的语法糖. Promise.all没有语法替代品.

当然,也可以自己重新实现Promise.all的行为(依赖于Promise构造函数和.then原语),但你真的不想这样做(有太多的陷阱).

原文链接:https://www.f2er.com/js/240849.html

猜你在找的JavaScript相关文章