javascript - 在 try/catch 中返回与在 .catch 中返回

标签 javascript node.js async-await

为什么 try/catchcatch 内部的 return 行为与 .catch 内部的 return 行为不同?

function promise(call, params) {
  return new Promise((keep, brk) => {
    brk(2)
    keep(1)
  })
}

async function a() {
  try {
   var r = await promise()
  } catch (e) {
    return console.error('a catch e', e)
  } 
  console.log('a after catch')
  return r
}

async function b() {
  let r = await promise().catch(e => {
    return console.error('b catch e', e)
  })
  console.log('b after catch')
  return r
}

a().then(v => console.log('a', v))
b().then(v => console.log('b', v))

返回

a catch e 2
b catch e 2
a undefined
b after catch
b undefined

最佳答案

主要区别在于,正如 @Berji 的评论所指出的,您的 catch 的 return 语句在 ab 中没有相同的封闭父函数。

  • a中,它直接包含在函数a

  • b 中,它包含在一个匿名函数内,而该匿名函数本身又包含在函数 b 内。

这意味着在后一种情况下,返回的是 b 内部的匿名函数,而不是 b 本身。

这解释了为什么在您的输出中,b after catch 被打印,但不是 a after catch:a 在控制台日志之前返回被调用。

关于javascript - 在 try/catch 中返回与在 .catch 中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58903218/

相关文章:

javascript - Rails 2.3.11 中未出现 CSV 下载框

javascript - Chrome 扩展程序 : URL permission not working

javascript - vis.js分层网络图布局

node.js - Express 参数化路由冲突

c# - 何时使用 TaskEx.Run 与 TaskEx.RunEx

javascript - 推特 Bootstrap - JS 不工作

javascript - Router.use() 需要中间件功能但未定义

node.js - Puppeteer 启动器错误结果未定义

node.js - 如何比较 : GET Data from 2 APIs,,POST bool

c# - await 是否创建另一个线程?