如何在使用“ await”的嵌套异步函数中处理异常

时间:2018-11-08 00:36:06

标签: javascript async-await es6-promise

我遇到这样的情况:

let obj = new MyObj()
obj.init()
.then(async () => {
    try {
        const items = await obj.getItems()
    } catch(error) {
        console.log(error.message)
    }
})

然后是getItems:

getItems() {
    let items = []

    this.itemIdList.forEach(async id => {
        try {
            const itemInfoList = await this.getItemInfo(id)

            if(itemInfoList) {
                itemInfoList.forEach(item => {
                   items.push(item.name)
                })
            }

        } catch(error) {
            //can't do this: throw error
            console.log(error.message
        }
    })

    return items
}

如果从this.getItemInfo(id)的调用中引发了异常,则该异常将被正确处理并被捕获。但是,如果我希望外部承诺处理该错误,我以为我可以重新抛出该错误(如您在上面的注释中看到的那样),但是我仍然会收到UnhandledPromiseRejection异常,并且永远不会被捕获。当我删除“抛出错误”时,异常被压缩(当然),并且外部承诺将永远不会看到该错误。我该如何处理从内部到外部的所有异常?

0 个答案:

没有答案