2017-03-01 6 views
0

結果を待つ必要のない非クリティカルな非同期タスクを実行する必要があるNode.js/Expressアプリケーションがあります(たとえば、分析プラットフォームでのデータ):結果を待たずに非同期タスク

router.post("/", function (req, res, next) { 
 
    criticalTask() 
 
     .then(result => { 
 
      res.json({success: true}); 
 
      nonCriticalTask(); 
 
     }) 
 
     .catch(next) 
 
}

nonCriticalTask()が途中でそれを終了させることなく、完全に実行されることを保証はありますか?これに何か制限はありますか?

+1

'nonCriticalTask​​()'に例外やエラーが発生した場合、それは途中で終了します。それを処理する必要があります。しかし、あなたが尋ねたことはホールドです。結果が他のタスクを実行するのを待っているわけではありません。 'nonCriticalTask​​'の中の何かが非同期なら、あなたは利点があります。 – RaR

+2

私はあなたがそれを終わらせると思いますか、それがなぜ呼び出されないかもしれないと思うのか、それがなぜ完了しないのかを詳しく説明できますか分かりません。 – nycynik

+0

私たちの場合、特に 'nonCriticalTask​​'は、外部サービスへのHTTP POSTリクエストの作成を含み、完全なPOSTデータを送信することなく(TCP/IPセッションがこの外部サービスプロバイダのログごとに)途中で終了することがありました、それが問題ならザピアです)。サーバーのログに何か間違っていたことは示されませんでした。 'nonCriticalTask​​'の結果を待っていたら、問題はなくなりました。だから、私は期待されている動作について何らかのドキュメンテーションを見つけようとしています。 – Anton

答えて

0

最後に私はこれに関するドキュメントを見つけることができませんでした。多くの実験とログの後に、nonCriticalTask()は終了せず、ノードによって実行され、実行中のタスクが存在する場合、またはハンドルが使用中の場合、ノードは終了しないようです。 DB接続が開いています。

したがって、私はnonCriticalTask()のアナリティクスで動作するようです。つまり、このようなバックグラウンドで実行される重要なものに対しては、ノードエンジンに依存することは、おそらく設計上の悪い習慣であり、他のアプローチも考慮する必要があります。永続キュー。

関連する問題