我正在开发Node.js中的系统,情况是这样的:我有一个承诺,返回我一个Id列表,并在该承诺(然后)的回报我调用另一种方法需要为第一个方法中返回的每个项目执行查询。返回承诺与每个
这样做的最好方法是什么?
我的代码是这样的:
checkLastPosition(list) {
let returnList = new Array();
var actualDate = new Date();
list.forEach(function (item) {
return new Promise((resolve, reject) => {
pool.getConnection(function (err, connection) {
if (err)
reject(err);
let sql = ' select * from posicao loc';
sql += ' where veiculoid = ?';
sql += ' and loc.dataHora = (select max(dataHora) from posicao where veiculoId = loc.veiculoId)';
sql += ' order by loc.veiculoid, datahora desc';
connection.query(sql, item.veiculoid, function (err, rows) {
connection.release();
if (err)
reject(err);
resolve(rows[0]);
});
});
}).then(result => {
if (!result) {
returnList.push(item.veiculoId);
} else {
if (new Date(result.dataHora.toLocaleString()) <= actualDate.setMinutes(actualDate.getMinutes() - 10)) {
returnList.push(item.veiculoId);
}
}
});
}, this);
}
使用'map'而不是'forEach',并将'Promise.all'应用于结果数组中。 – Bergi
我该怎么做? –