Node.js在没有等待的情况下调用异步函数有任何问题吗?

时间:2020-04-08 05:33:24

标签: node.js memory-leaks async-await

我有一个端点,我想对用户不感兴趣的地方进行async后处理,因此我想异步处理它们并向用户发送响应。

类似这样的东西。

const createOrder = async (req,res)=>{

  const order = await doCreateOrder(); //creates the order
  somePostProcessing().catch(()=>{
       //handle errors
    });//asycn function which does some db/network operations(not interested in results)
  return reply.send(order)

}

但是我担心会引起诸如内存泄漏(我的团队负责人说)之类的问题吗? 还有在nodeJS中进行此类后处理的最佳方法或其他选择是什么?

1 个答案:

答案 0 :(得分:1)

忽略承诺的结果不是问题。无论您是否聆听承诺的成功完成,这都是完全可选的。有时有一些原因可以忽略。例如,我通常不让函数在函数结尾等待文件关闭。

忽略被拒绝的承诺是一个问题,因为这类似于同步代码中未处理的异常。

因此,只要您处理somePostProcessing().catch(...)时出现的所有可能的错误,那么不必理会补全。

注意:您确实需要确保您的代码预期await doCreateOrder()中出现错误时会发生什么,因为这将立即拒绝createOrder()返回的承诺,因此createOrder()的调用者需要为被拒绝的承诺提供处理程序,或者您需要在此函数内使用try/catch来捕获和处理该可能的错误。