从匿名函数内部的函数返回

时间:2018-08-09 09:50:53

标签: javascript node.js async-await

我具有以下功能。

function foo() {
  return new Promise(async (resolve, reject) => {
     await someFunctionThatWillAlwaysBeRejected().catch(err => {
       return reject(err);
     })
     console.log("Some output that should never be shown");
     resolve();
   })
  }

该函数将按预期方式拒绝,但此后它将继续运行直到结束。我猜这是因为catch中的return仅从匿名函数返回,而不是整个Promise返回。问题是,是否有任何从catch内部返回的方式,因此代码在那之后将不会继续执行?我知道我可以将所有内容包装在try catch中,而不是使用.catch,但我正努力避免这种情况。

3 个答案:

答案 0 :(得分:1)

  

问题是,是否有任何方法可以从渔获物内返回

否。

  

我知道我可以将所有内容包装在try catch中,而不是使用.catch,但是我正在努力避免这种情况。

async / await允许您精确地执行此操作,从而可以解决您遇到的问题。停止避免它。

答案 1 :(得分:1)

尝试一下:

return new Promise(async (resolve, reject) => {
 someFunctionThatWillAlwaysBeRejected().then(result => {
   console.log("Some output that should never be shown");
   resolve();
 })
 .catch(err => {
   return reject(err);
 })

})

答案 2 :(得分:0)

您不需要那些Promise包装器,因为异步函数总是返回Promise。因此,您的代码可以简化:

async function foo() {
     await someFunctionThatWillAlwaysBeRejected();
     console.log("Some output that should never be shown");
}