在以下代碼中,我試圖將第一個和第二個查詢的結果放入名爲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