[英]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.