簡體   English   中英

當 for 中有查詢時如何返回異步 function 的值

[英]How to return a value of an async function when there's a query inside a for

我試圖在 for 循環完成后返回一個值,for 循環位於異步 function 內。 在循環內部,有一個插入到數據庫的查詢。

function 工作正常,但是當我使用 postman 時,響應返回空(即使值已插入數據庫)

以下是我如何稱呼 function:

        insertarPracticas(turno_id,req.body.lista_codigos_practicas, queryInsertarPracticas)
        .then( result=> {
                 res.status(200).json({
                      "Practicas Agregadas": result
                    })
                 }
        )

這是 function:

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");
})

這里發生的事情是 function 不會等待連接查詢結束,即使它向數據庫插入值,在 Postman 上我得到第一個結果,它是空的:

在此處輸入圖像描述

但我確實在我的數據庫中插入了值。

處理這個問題的正確方法是什么? 我嘗試使用 map 而不是 for,現在我正在嘗試使用 promise,但我不確定我是否正確使用它。

這是控制台,您可以在其中看到 console.log("en for" + practicasAgregadas) 返回空,但它應該有一些值。

在您的 map 之后,只需使用:

等待 Promise.all(yourArray);

我不知道您是如何構建連接文件的,但您應該將其更改為異步 function 並等待 connection.query

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM