正确处理异步/等待中的错误

时间:2018-06-01 22:28:13

标签: javascript node.js error-handling async-await

根据我的阅读,使用try/catch是使用async/await时处理错误的“正确”方法。但是,如果我将请求放在try/catch块中,我遇到了尝试使用请求响应的问题:

    try {
        async someMethod () {
            const result = await someRequest()
        }
    } catch (error) {
        console.log(error)
    }

    console.log(result) // cannot access `result` because it is not defined... 

因此,是否有更好的方法来处理错误并能够访问async/await来电的请求响应?我能想到的唯一另一种方法是将整个代码块放在try/catch块内..但我觉得有一种更优雅的方式..

提前致谢!

2 个答案:

答案 0 :(得分:-1)

(async () => {
  result = null;
  async someMethod(){
    result = await someRequest();
  }
  console.log(result)
})()
.catch(error => console.log(error));

答案 1 :(得分:-1)

您应该在块范围之外声明变量,或者不要在结果前面使用任何关键字。这样它就会使它成为一个全局变量,你可以在块代码之外访问它。你可以这样写: -

try {
    async someMethod () {
        result = await someRequest()
    }
} catch (error) {
    console.log(error)
}

console.log(result)

或者您也可以使用较短的方法而不是try catch来使代码更清晰,您也可以知道错误的来源。

async someMethod () {
        result = await someRequest().catch(err=>{
            console.log(err)
        })
}
console.log(result)