【问题标题】:Node JS - Async - Response is sent while queries are being executedNode JS - 异步 - 在执行查询时发送响应
【发布时间】:2016-04-15 13:27:41
【问题描述】:

我正在使用下面的代码来执行一组查询并发送对查询结果进行一些验证的响应。对于这种情况,我在 Node JS 中使用异步模块。

async.series([
           function(callback){
               common.commonValidations(db);
               callback();
           },
           function(callback){
                console.log('second function');
                res.end(JSON.stringify(gErrors));
                callback();
           }

        ], function(err){
            console.log('sending res to client');
            console.log(err);
        });

common.commonValidations(db) 函数用于执行一些 db2 查询。

我的问题是,虽然我使用的是异步模块,但在查询执行过程中响应会发送到客户端。根据我对异步模块的理解,数组中的第二个函数在第一个函数完成工作后执行。

有人可以帮我解决这个问题吗?提前致谢。

【问题讨论】:

  • 你的问题是什么?
  • 让我猜猜,common.commonValidations(db) 也是异步函数?问题是,它是async,这意味着第一个函数会立即执行并完成,它不会等待common.commonValidations 得到响应,这就是发送响应(即第二个函数)几乎立即执行的原因。
  • @Quentin 我的问题是,如何修复我的代码以仅在执行所有查询并完成验证后才发回响应?
  • @NaveenChappa — 在查询完成之前不要调用回调。
  • @Adam,当调用转到第二个函数时,第一个函数仍在执行查询。第一个功能没有完成它的工作。有什么解决方案可以让第一个函数等待查询结果验证完成?

标签: javascript node.js


【解决方案1】:

看起来common.commonValidations(db) 是一个异步函数,但您并没有等待它完成。在commonValidations 的答案返回之前,您正在调用callback() 函数。

一个可能的变化可能是这样的

common.commonValidations(db,function(err,data) {
  //check error
  //process data
  //and then
  callback()
})

【讨论】:

  • 我尝试了上述解决方案。执行第一个函数后调用没有到达第二个函数。我也放了一个控制台日志,没有打印任何内容。我正在通过邮递员工具测试它,它表明请求仍在处理中。
  • async.series([ function(callback){ common.commonValidations(db, function(err, data){ console.log('validations are done'); callback(); }); } , function(callback){ console.log('第二个函数'); res.end(JSON.stringify(gErrors)); callback(); } ], function(err){ console.log('callback function'); console.log(err); });
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 2015-07-24
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 2017-05-15
相关资源
最近更新 更多