Promises.all() 不是在等待 promise 的解决



我有一个节点.js代码,我想在其中等待所有sql查询完成然后处理下一部分。

在这里,我返回承诺并存储在数组中。返回所有承诺后,我想做一些计算。但似乎 Promises.all(( 并没有等待承诺得到解决并在计算阶段给我 0 ?

有人可以帮助我解决这个问题,我在哪里犯了错误?

var results= [];
    var salaries = 0;
    var numberOfWorking = 0;
    var numberOfNotFound = 0;
    var numberOfFound = 0;
    var averageSalary = 0;
    var promises = [];
    for (grad in graduates) {
      promises.push(function () {
        return new Promise(function (resolve, reject) {
          var entree = graduates[grad];
          console.log("entree:", JSON.stringify(entree));
          var query = "SELECT Salary FROM employment WHERE FirstName='" + entree['firstName'] + "' AND MiddleName='" + entree['middleName'] + "'" +
            "AND LastName='" + entree['lastName'] + "' AND DOB='" + entree['birth'] + "'";
          connection.query(query, function (err, rows, fields) {
            if (!err) {
              if (rows.length == 0) {
                numberOfNotFound = numberOfNotFound + 1;
              }
              else {
                var Salary = parseInt(rows[0].Salary, 10)
                console.log("Salary", Salary);
                numberOfFound = numberOfFound + 1;
                salaries += Salary;
                if (Salary > 0) {
                  numberOfWorking = numberOfWorking + 1;
                }
                console.log("salaries", salaries);
                console.log("numberOfFound", numberOfFound);
                console.log("numberOfWorking", numberOfWorking);
                resolve(true);
              }
            }
            else {
              console.log(req.body);
              console.log("ERROR:", err);
              reject(err);
            }
          });
        });
      });
    }
    Promise.all(promises).then(function (dataArr) {
      if (numberOfFound > 0) {
        averageSalary = salaries / numberOfFound;
      }
      else {
        averageSalary = 0;
      }
      console.log("salaries", salaries);
      console.log("averageSalary", averageSalary);
      console.log("numberOfFound", numberOfFound);
      console.log("numberOfWorking", numberOfWorking);
      var tosendOnePkg = {};
      tosendOnePkg = {
        "packageID": pId,
        "numberOfPersons": numberOfFound + numberOfNotFound,
        "numberOfWorkingPersons": numberOfWorking,
        "notFoundPersons": numberOfNotFound,
        "averageSalary": averageSalary
      }
      tosendOnePkg['packageID'] = package;
      results.push(tosendOnePkg);
    });

问题是您要向 promise 数组添加函数,请参阅示例的第 9 行:

promises.push(function () {
    return new Promise(function (resolve, reject) {
        ...
    }
});

相反,您应该添加承诺本身:

promises.push(new Promise(function (resolve, reject) {
    ...
});

最新更新