节点.js 不等待数据
Node.js does not wait for the data
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)
立即执行,而无需等待数据放入发送变量中。我知道node.js是异步的,这就是它的执行方式。有没有办法只有在 for 循环完成执行后才能发送响应?提前感谢任何帮助。
因为 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);
}
});
}
}
Nodejs 使用异步调用,您应该尝试Promises
等待和发送响应阅读这篇文章,它会帮助你
[http://12devs.co.uk/articles/promises-an-alternative-way-to-approach-async-javascript/][1]
相关文章:
- 正在等待呈现图表,直到加载数据为止
- 节点.js 不等待数据
- md自动完成don't等待来自服务的数据.如何解决
- 等待数据时显示加载程序
- 等待初始化,直到异步加载所有数据
- 是否可以在 spotfire 文本区域中显示图像/消息以等待加载数据
- 等待加载的数据,然后在 AngularFire 0.9.0 中返回
- jQuery事件等待数据加载到页面中
- 在 PHP 中获取数据时等待动画
- 在 Javascript 中等待来自 JQuery $.each 中的异步嵌套函数的数据
- 在输出数据之前,等待循环完成每个数组项的 $.getJSON
- 在呈现子视图之前等待集合数据
- 使用$timeout等待服务数据解析
- 流星 - 铁路由器不等待onBeforeAction钩子中的订阅数据
- 等待请求完成并返回数据
- IronRouter等待,数据和onAfterAction混乱
- 一个程序PhantomJS如何等待AngularJS$资源解析,然后再尝试测试返回的数据
- CKEDIT getData:等待方法完成后再提交数据
- Javascript等待异步从Firebase检索数据
- 如何等待数据加载到AngularJS中