Nodejs есть какие-либо проблемы при вызове асин c функции без ожидания? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть конечная точка, где я хочу выполнить некоторую 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 Ответ

1 голос
/ 08 апреля 2020

Это не проблема игнорировать результат обещания. Это совершенно необязательно, слушаете ли вы успешное завершение обещания или нет. Иногда есть причины не заботиться. Например, я часто не заставляю функцию ждать закрытия файла в конце функции.

Проблема игнорировать отклоненное обещание, так как это аналог необработанного исключения в синхронном коде .

Итак, если вы обрабатываете все возможные ошибки, которые, как вам кажется, вы делаете с somePostProcessing().catch(...), то не проблема игнорировать завершение.

Примечание: вам нужно убедитесь, что ваш код предвидит, что произойдет, если в await doCreateOrder() будет ошибка, поскольку она немедленно отклонит обещание, возвращаемое createOrder(), поэтому вызывающему createOrder() должен быть обработчик для этого отклоненного обещания ИЛИ вам нужен try/catch внутри этой функции, чтобы перехватить и обработать эту возможную ошибку.

...