我有一个node.js代码,我想等待所有的sql查询完成 ,然后处理下一部分。Promises.all()不等待承诺的解决方案
这里我返回承诺并存储在数组中。 所有的承诺都返回后,我想做一些计算。 但似乎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);
});
promises似乎是一个**函数的数组** - 从未执行的函数 - 尝试删除'function()return'和相应的'}' –
也是''tosendOnePkg ['packageID'] = package ;'似乎是奇怪的代码,因为包没有在任何地方定义,并且'tosendOnePkg.packageID'在前面的语句中被设置为'pId'! –
@JaromandaX谢谢!其实这只是代码的一部分,而不是完整的代码! –