我已经看到一些有关立即发送响应和运行CPU密集型任务的问题。
我的情况是我的节点应用程序取决于第三方服务响应,因此流程是
- 节点接收请求并通过第三方服务进行身份验证
- 验证后发送响应给用户
- 执行一些需要第三方服务响应的任务
- 将结果保存到数据库
就我而言,没有 CPU密集型任务,也无需向用户提供其他任务的结果,但是节点需要等待第三方服务的响应。身份验证后,我必须对第三方服务进行多次请求/确认才能完成任务。
如何解决这种情况?
我已经看到了child_process,nextTick和setTimeOut的一些解决方法。
最终,我想立即向用户发送响应并执行与该用户相关的任务。
谢谢。
答案 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);
});
}