CNode

小白问个关于async的问题(已解决)

问答
Hhfqf发布于10 年前最后回复10 年前6 回复3618 浏览0 收藏

async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。

async function f() { throw new Error('出错了'); }

f().then( v => console.log(v), e => console.log(e) ) // Error: 出错了

不理解.then里的e和v是怎么来的

来自酷炫的 CNodeMD

查看回复

回复 (6)

S
steambap#1·10 年前

e 和 v 是回调函数的参数。

另外我认为在 then 里面传两个回调是反模式的,在最后 catch 才是好的模式,我会这样写: fn().then(console.log) .catch(console.error)

Z
zbinlin#2·10 年前

如果 async 函数 f 有 return 值,该值就是这里的 v; 如果在函数 f 里抛出错误,就会将错误传到 e 里,就像你的例子里的 new Error(‘出错了’)

H
hfqf#3·10 年前
引用 steambape 和 v 是回调函数的参数。 另外我认为在 then 里面传两个回调是反模式的,在最后 catch 才是好的模式,我会这样写: fn().then(console.log) .catch(c...

@steambap e和v我还是没理解他们的出处,我可不可以随便写个参数都能当做回调的返回值

来自酷炫的 CNodeMD

H
hfqf#4·10 年前
引用 zbinlin如果 async 函数 f 有 return 值,该值就是这里的 v; 如果在函数 f 里抛出错误,就会将错误传到 e 里,就像你的例子里的 new Error(‘出错了’)

@zbinlin e和v我还是没理解他们的出处,我可不可以随便写个参数都能当做回调的返回值

来自酷炫的 CNodeMD

参与回复
登录后即可参与回复。登录