在以下代码中,我试图将第一个和第二个查询的结果放入名为result
的全局变量中。问题是Promise.all()
未等待查询完成,并且在继续执行then()
之前。如何正确使用Promise.all()和然后()与异步函数?
我该如何解决?
代码:
var result = {};
Promise.all([
connection.query('SELECT * FROM analysis',
function(err, rows, fields) {
if (err) throw err;
result.analysis = rows;
console.log("query 1");
}),
connection.query('SELECT * FROM analysis_description',
function(err, rows, fields) {
if (err) throw err;
result.analysis_description = rows;
console.log("query 2");
})
])
.then(function(result){
console.log(result);
console.log("result");
});
输出:
result
query 1
query 2
不'connection.query'返回一个承诺? –
Promise.all接受一系列承诺。这些看起来不像承诺:-) –
您需要“promisify”一个正常的异步回调函数,将其用作承诺:作为承诺是必须立即返回的值。有几种方法可以实现这一点。 – user2864740