Javascript 在ES6中,当调用throw时,throw语句下面的代码是否执行过?

Javascript 在ES6中,当调用throw时,throw语句下面的代码是否执行过?,javascript,ecmascript-6,Javascript,Ecmascript 6,在node中,我习惯于使用回调处理错误 我正在尝试跳转到异步。。。wait,它使用一种我不习惯的错误处理方法 我想知道,当调用throw时,throw语句下面的代码是否执行过?换句话说,我需要这样做吗 async fetch() { if (somethingBad) { throw new Error('Cannot fetch') } else { let result = await this.read(this.get('id'))

在node中,我习惯于使用回调处理错误

我正在尝试跳转到异步。。。wait,它使用一种我不习惯的错误处理方法

我想知道,当调用throw时,throw语句下面的代码是否执行过?换句话说,我需要这样做吗

async fetch() {
    if (somethingBad) {
        throw new Error('Cannot fetch')
    } else {
        let result = await this.read(this.get('id'))
        return result
    }
}
…或者仅仅做到这一点就足够了:

async fetch() {
    if (somethingBad) throw new Error('Cannot fetch')
    let result = await this.read(this.get('id'))
    return result
}
在ES6中,当调用throw时,throw语句下面的代码是否执行过

不,不是。在异步函数中,
throw
表示立即返回被拒绝的承诺。这很像这样:

return Promise.reject(new Error('cannot fetch'));
它立即退出您的函数,并返回一个被拒绝的承诺,其原因设置为您使用的
throw

async
函数的一个优点是,它们自动捕获异常并将其转换为被拒绝的承诺,因为
async
函数的契约总是返回承诺



仅供参考,在非异步函数(例如,仅一个常规函数)中,函数的其余部分也不会执行。该功能立即暂停。您抛出了一个异常,该异常将在调用链中向上传播,直到找到异常处理程序或到达顶层(在顶层,它将是一个未处理的异常)。

您尝试过测试该理论吗?我尝试过,而且似乎有效。但是,有人想确定。。。