【发布时间】:2017-01-10 09:37:01
【问题描述】:
我遇到了 nodejs 的异步问题。希望你能帮助我。
exports.DeviceInfo = function(req, res, next) {
var nets = req.body.networks;
db.collection("device", function(err, deviceConf) {
var detected_beacons = [];
if (!err) {
for (var i = 0; i < nets.length; i++) {
deviceConf
.find({
"data.number": nets[i]
})
.toArray(function(errFind, saver) {
if (!errFind && saver) {
saver.forEach(function(disp) {
var detected = {};
detected.address = disp.address;
detected_beacons.push(detected);
console.log(detected_beacons);
});
}
});
}
console.log(detected_beacons);
res.json(detected_beacons);
} else {
console.error(err);
res.status(500);
res.json({
message: "Couldn't connect to database"
});
}
});
};
如果我写一些日志,我们可以看到问题所在。在 for 子句之前返回检测到的信标。我想在 for 之后返回,以便充满数据。我已阅读有关回调和承诺的信息,但我不知道如何在我的代码中使用它们。
【问题讨论】:
-
看cmets到stackoverflow.com/q/39288896/18771。您的代码中存在完全相同的错误。
-
我已经用 forEach 改变了 for 循环,但同样的问题。
-
没有出现错误,但结果是一样的。 @Tomalak
-
Promise.all( ... ).then( ... )是你的朋友。 -
我尝试使用它,但我不知道在我的代码中写在哪里@moon
标签: node.js asynchronous server q