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

Node.js 在nodejs中回调函数执行完成后发送响应,node.js,mongoose,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

我对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})
            })
         }
      })
   })
 }
})
app.post('/data',函数(req,res){
var send=[]
对于(var i=0;i
当我这样写的时候,它发送的是上次生成的相同的随机代码。我试着删除整个内容,用函数编写并回调,但它也不起作用

一个解决方案是使用,这是
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}); });
});
var Promise=require('Q');
app.post('/data',函数(req,res){
var send=[];
var p=函数(){
var deferred=Q.deferred();
仪器.计数({condention},函数(err,count){
//使用计数和其他参数,我生成的代码是唯一的
如果(错误){
延迟。拒绝(新错误(错误));
}否则{
发送.推送(随机数)
}
});
回报。承诺;
}
var ps=[];
对于(var i=0;i