简体   繁体   English

将所有数据插入数据库后响应请求

[英]Respond to request after all data is inserted to database

I am trying to implement multiple data insertion on one call and trigger response only after all data is inserted. 我试图在一个调用上实现多次数据插入,并且仅在插入所有数据之后才触发响应。 This is how I am currently doing it: 这是我目前正在做的事情:

create: function(req, res) {
    var response = {};
    var num = req.body.num;
    var ret = 0;

    for (var i = 0; i < num; i++) {
        var db = new user();

        db.enabled =  false;
        db.save(function(err){
            if(err) {
              // Handle error
            } else {
              ret++;
              // Do something
            }
        });
    }

    response = {"status" : 200, "message" : "It's working: " + ret};
    res.json(response);
}

The problem with this approach is that all the callbacks for save will be triggered after res.json(response) which is wrong because sometimes I would also like to inform user how much data was saved. 这种方法的问题在于,所有save的回调将在res.json(response)之后触发,这是错误的,因为有时我还想告知用户保存了多少数据。 User will always receive the following response: 用户将始终收到以下响应:

It's working: 0

Because ret variable is always 0. It's getting increased only after response is already triggered. 因为ret变量始终为0。仅在响应已触发后才增加。 What am I doing wrong? 我究竟做错了什么?

EDIT: 编辑:

Code after Will's suggestion: Will的建议后的代码:

var Q = require('q');

create: function(req, res) {
    var response = {};
    var num = req.body.num;
    var ret = 0;
    var tasks = [];

    for (var i = 0; i < num; i++) {
        var db = new user();

        db.enabled =  false;

        tasks.push(db.save());
    }

    Q.all(tasks).then(
        function(results) { 
          response = {"status" : 200, "message" : "It's working!"}; 
        }, 
        function(err) { 
          response = {"status" : 500, "message" : "Not working!" };
        );

    res.json(response);
}
for (var i = 0; i < num; i++) {
        var db = new user();

        db.enabled =  false;
        db.save(function(err){
            if(err) {
              // Handle error
            } else {
              ret++;
              if(ret == num){
                response = {"status" : 200, "message" : "It's working: " + ret};
                res.json(response);
              }
            }
        });
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM