use*_*947 2 javascript ecmascript-6
在节点中,我习惯于使用回调来处理错误.
我试图跳转到异步...等待,它使用我不习惯的错误处理方法.
我想知道,当调用throw时,是刚执行的throw语句下面的代码吗?换句话说,我需要这样做吗......
async fetch() {
if (somethingBad) {
throw new Error('Cannot fetch')
} else {
let result = await this.read(this.get('id'))
return result
}
}
Run Code Online (Sandbox Code Playgroud)
......或者仅仅这样做是否足够:
async fetch() {
if (somethingBad) throw new Error('Cannot fetch')
let result = await this.read(this.get('id'))
return result
}
Run Code Online (Sandbox Code Playgroud)
在ES6中,当调用throw时,是否会执行throw语句下面的代码?
不它不是.在异步函数中,throw表示立即返回被拒绝的承诺.这很像是这样做的:
return Promise.reject(new Error('cannot fetch'));
Run Code Online (Sandbox Code Playgroud)
它立即退出您的函数并返回一个被拒绝的promise,其原因设置为您使用的任何值throw.
关于async函数的一个好处是它们自动捕获异常并将它们转换为被拒绝的promise,因为async函数的契约是它总是返回一个promise.
仅供参考,在非异步功能(例如,只是常规功能)中,功能的其余部分也不会执行.该功能立即暂停.你抛出了一个异常,它会在调用链中向上传播,直到找到异常处理程序或顶层(它将是一个未处理的异常).
| 归档时间: |
|
| 查看次数: |
32 次 |
| 最近记录: |