NodeJS child_process或nextTick或setTimeout用于长时间等待的任务?

时间:2019-03-28 07:37:56

标签: node.js express asynchronous async-await node-modules

我已经看到一些有关立即发送响应运行CPU密集型任务的问题。

我的情况是我的节点应用程序取决于第三方服务响应,因此流程是

  
      
  1. 节点接收请求并通过第三方服务进行身份验证
  2.   
  3. 验证后发送响应给用户
  4.   
  5. 执行一些需要第三方服务响应的任务
  6.   
  7. 将结果保存到数据库
  8.   

就我而言,没有 CPU密集型任务,也无需向用户提供其他任务的结果,但是节点需要等待第三方服务的响应。身份验证后,我必须对第三方服务进行多次请求/确认才能完成任务。

如何解决这种情况?

我已经看到了child_process,nextTick和setTimeOut的一些解决方法。

最终,我想立即向用户发送响应并执行与该用户相关的任务。

谢谢。

2 个答案:

答案 0 :(得分:1)

elsewhere in your code
function do_some_tasks() { //... }

// route function
(req, res) => {
  // call some async task
  do_some_tasks()
  // if the above is doing some asynchronous task, next function should be called immediately without waiting, question is is it so?
  res.send()
}

// if your do_some_tasks() is synchronous func, the you can do
// this function call will be put to queue and executed asynchronously
setImmediate(() => {
  do_some_tasks()
})
// this will be called in the current iteration
res.send(something)

答案 1 :(得分:0)

只需在此处编写一个非常通用的代码块:

var do_some_tasks = (req, tp_response) => {
    third_party_tasks(args, (err, result)=<{
        //save to DB
    });
}

var your_request_handler = (req,res) => {
    third_party_auth(args, (tp_response)=>{
        res.send();
        //just do your tasks here
        do_some_tasks(req, tp_response);
    });
}