在nodejs中回调函数执行完成后发送响应

时间:2016-03-03 08:14:37

标签: node.js mongoose

我在nodejs中有回调函数和循环的问题我怎么能这样做才能在回调函数执行完成后发送响应

app.post('/data', function(req,res){
 var send = []
 for (var i =0; i < p_objReq.body.quantity; i++) {
   Instruments.count({//condetion}, function(err, count){
     //using count and other parameters I am generating the code which is unique
      Instruments.find({id: 'rondom_generated_code'},function(err, instrumentsCount){
         if(instrumentsCount.length == 0){
           send.push(rondom_generated_code)
           if(send.length == p_objReq.body.quantity)
             p_objRes.json({success : true, data : send})
         }
         else{
            Instruments.count({//condetion}, function(err, count){
              //using count and other parameters I am generating the code which is unique
             send.push(rondom_generated_code)
             if(send.length == p_objReq.body.quantity)
               p_objRes.json({success : true, data : send})
            })
         }
      })
   })
 }
})

当我这样写时它发送的是最后一次生成的随机代码。我尝试删除整个内容并写入函数并回调但它也无法正常工作

1 个答案:

答案 0 :(得分:0)

一种解决方案是使用Q.js,它是Promise库之一。更多Q.js的API,请参阅其中的链接。以下是一个示例代码可能对您有所帮助,如果我能正确地抓住您的问题。

var Promise = require('Q');

app.post('/data', function(req,res){
    var send = [];
    var p = function () {
        var deferred = Q.defer();

        Instruments.count({condetion}, function(err, count){
           //using count and other parameters I am generating the code which is unique
            if (err) {
                deferred.reject(new Error(error));
            } else {
                send.push(randomnumber)
            }
        });
        return deferred.promise;
    }
    var ps = [];
    for (var i =0; i < p_objReq.body.quantity; i++) {
        ps.push(p);  
    }

    Q.all(ps).then(function(){ res.json({success : true, data : send}); });
});