我正在使用循环来查询事件,但是循环之后的代码没有被执行。为什么会这样,我该如何解决这个问题?
router.post("/components/Pages/BrokerAPage/queryAll", (req, res) => {
var requestedResult;
for (i = 0; i < EventIDList.length; i++) {
queryEvent(EventIDList[i])
.then((result) => {
if (result) {
requestedResult += result;
}
})
.catch(err =>
res.send(JSON.stringify({ status: 'error', message: err.message})));
}
console.log("*************TEST************")
console.log("*************"+requestedResult+"*************")
res.json(JSON.stringify(requestedResult));
});
答案 0 :(得分:1)
router.post("/components/Pages/BrokerAPage/queryAll", (req, res) => {
var requestedResult;
var promises = [];
EventIDList.forEach((EventID) => {
// gather all Promises
promises.push(queryEvent(EventID)
.then((result) => {
if (result) {
requestedResult += result;
}
}));
});
// wait till all promises are settled, then log result
Promise.all(promises).then(() => {
console.log("*************TEST************");
console.log("*************" + requestedResult + "*************");
res.json(JSON.stringify(requestedResult));
}).catch(err => res.send(JSON.stringify({
status: "error",
message: err.message
})));
});
答案 1 :(得分:0)
您可以使用async npm模块使循环同步。
router.post("/components/Pages/BrokerAPage/queryAll", (req, res) => {
var requestedResult;
async.eachOf(EventIDList, function(EventId, index, acb) {
queryEvent(EventId)
.then((result) => {
if (result) {
requestedResult += result;
return acb(null);
}
})
.catch(err =>
res.send(JSON.stringify({ status: 'error', message: err.message})));
return acb(null);
}
});