function checkContact(req, res) {
for (var numb in req.body) {
console.log(numb + ":" + req.body[numb]);
checkValue(numb, function(err, result) {
if (result) {
console.log(result);
send[result] = "true";
console.log(send);
}
if (err) {
console.log(err + "not");
}
});
}
res.json(send);
}
function checkValue(number, callback) {
mongo.connect(conn, function() {
var doc = mongo.collection("user");
doc.findOne({
number: number
}, function(err, res) {
if (res) {
//console.log(send+"val");
//send[number]="true";
callback(null, number);
}
});
callback(null, 0);
});
}
此处res.json(send)
立即执行,无需等待数据放入send变量。我知道node.js是异步的,这就是它的执行方式。有没有办法只在for循环执行完毕后才能发送响应?提前感谢您的帮助。
答案 0 :(得分:1)
因为Node.JS是异步的,所以你需要在回调中嵌入它。
function checkContact(req, res) {
var reqLength = req.body.length;
for (var numb in req.body) {
console.log(numb + ":" + req.body[numb]);
checkValue(numb, function(err, result) {
if (result) {
console.log(result);
send[result] = "true";
console.log(send);
}
if (err) {
console.log(err + "not");
}
reqLength--;
if(reqLength === 0) {
res.json(send);
}
});
}
}
答案 1 :(得分:0)
Nodejs使用异步调用,您应该尝试Promises
等待和发送响应
阅读这篇文章它会帮助你
[http://12devs.co.uk/articles/promises-an-alternative-way-to-approach-asynchronous-javascript/][1]