Javascript 循环中的承诺,循环后的代码不执行

Javascript 循环中的承诺,循环后的代码不执行,javascript,promise,Javascript,Promise,我使用一个循环来查询事件,但是循环后的代码没有执行。为什么会这样?我该如何解决这个问题 router.post("/components/Pages/BrokerAPage/queryAll", (req, res) => { var requestedResult; for (i = 0; i < EventIDList.length; i++) { queryEvent(EventIDList[i]) .then((result) =&g

我使用一个循环来查询事件,但是循环后的代码没有执行。为什么会这样?我该如何解决这个问题

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));
});
您可以使用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);
    }
});

但是queryEvent被多次激发?应该执行它,但requestedResult为空。这是一个异步问题。您必须等待所有对queryEvent的调用完成。否则,您可能会在requestedResult保存预期输出之前到达最后三行代码。for循环不同步。承诺返回后,打印requestedResult。其空原因承诺为resolve async。当输出requestedResult时,queryEvent承诺未完成。您应该将queryEvent存储在一个use Promise.all数组中
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
    })));
});