在循环中保证,不执行循环后的代码

时间:2018-03-06 11:07:14

标签: javascript promise

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

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));
});

2 个答案:

答案 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);
    }
});