我試圖在 for 回圈完成后回傳一個值,for 回圈在一個異步函式中。在回圈內部,有一個插入資料庫的查詢。
該函式作業正常,但是當我使用郵遞員時,回應回傳空(即使值已插入到資料庫中)
這是我呼叫函式的方式:
insertarPracticas(turno_id,req.body.lista_codigos_practicas, queryInsertarPracticas)
.then( result=> {
res.status(200).json({
"Practicas Agregadas": result
})
}
)
這是功能:
async function insertarPracticas(turno_id, req, queryInsertarPracticas){
//practicasAgregadas="";
return new Promise((resolve, reject) => {
for (let i=0; i< req.length; i ){
connection.query(
queryInsertarPracticas, [turno_id, req[i]],(error2, row2) => {
if (error2) {
console.log("Error al insertar turno detalle (prácticas): " req[i] " " error2);
practicasNoAgregadas = req[i] "-";
}else{
console.log("Turnos detalle agregados " req[i]);
practicasAgregadas = req[i] "-";
console.log("practicas " practicasAgregadas);
}
});
console.log("en for " practicasAgregadas);
}
resolve(practicasAgregadas)
// Or of there was an error
reject("error");
})
這里發生的事情是該函式不會等待連接查詢結束,即使它向資料庫插入值,在 Postman 上我得到第一個結果,它是空的:

但我確實在我的資料庫中插入了值。
處理這個問題的正確方法是什么?我試過使用 map 而不是 for,現在我正在嘗試使用 promise,但我不確定我是否正確使用它。
這是控制臺,您可以在其中看到 console.log("en for" practicasAgregadas) 回傳空,但它應該有一些值。
uj5u.com熱心網友回復:
我不知道您是如何構建連接檔案的,但您應該將其更改為異步函式并等待 connection.query
uj5u.com熱心網友回復:
在您的地圖之后,只需使用:
await Promise.all(yourArray);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/379812.html
標籤:javascript mysql 表达 异步
