【发布时间】:2022-01-15 07:47:37
【问题描述】:
我试图在 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) 在它应该有一些值时返回空。
【问题讨论】:
-
connection.query是异步的。您应该使用Promise.all等待所有这些查询完成
标签: javascript mysql express asynchronous