Javascript 异步函数与for的循环和内部等待,它会等待吗?

Javascript 异步函数与for的循环和内部等待,它会等待吗?,javascript,async-await,Javascript,Async Await,我对javascript中使用循环的异步等待有点困惑。我创建了下面的代码,其中包含三个数据库查询。但我不确定第三个查询(“deleteData”)是否总是等待for循环在步骤2中完成?换句话说,在执行异步函数的下一行之前,步骤2中的for of循环是否总是完成?如果不是,我应该如何编写循环 async function run() { //1. Select Data from table "userData" const selectData = await

我对javascript中使用循环的异步等待有点困惑。我创建了下面的代码,其中包含三个数据库查询。但我不确定第三个查询(“deleteData”)是否总是等待for循环在步骤2中完成?换句话说,在执行异步函数的下一行之前,步骤2中的for of循环是否总是完成?如果不是,我应该如何编写循环

async function run() {
    //1. Select Data from table "userData"
    const selectData = await promisePool.execute(
        "SELECT user_id, firstname, lastname FROM userData WHERE user_id = (?)", 
        [1]
    )
    const parseData = JSON.parse(JSON.stringify(selectData))
    const selectedData = parseData[0]

    // 2. Insert each of the selected data with a loop to another table ("backupTable")
    for (const el of selectedData) {
        const backup = await promisePool.execute(
            "INSERT INTO backupTable (user_id, firstname, lastname) VALUES (?,?,?) ON DUPLICATE KEY UPDATE firstname=(?)",
            [el.user_id, el.firstname, el.lastname, el.firstname]
        )
    }

    // 3. Delete the data from table "userData"
    const deleteData = await promisePool.execute(
        "DELETE FROM userData WHERE users_companyID = (?)",
        [1]
    )
}
run();

对。它将等待。看看下面的例子

//延迟响应模拟块的启动
函数calSqr(val){
log(`@calSqr val=${val}`);
//2秒延迟
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
解析(val*val)
}, 2000)
});
}
//延迟响应模拟块结束
异步函数printNumbers(){
for(常量值[1,2,3,4,5]){
log(`@printNumbers调用getNum(${val})`);
让res=等待calSqr(val);
log(`@printNumbers res=${res}`);
console.log('------------');
}
}

打印号码()是。它将等待。看看下面的例子

//延迟响应模拟块的启动
函数calSqr(val){
log(`@calSqr val=${val}`);
//2秒延迟
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
解析(val*val)
}, 2000)
});
}
//延迟响应模拟块结束
异步函数printNumbers(){
for(常量值[1,2,3,4,5]){
log(`@printNumbers调用getNum(${val})`);
让res=等待calSqr(val);
log(`@printNumbers res=${res}`);
console.log('------------');
}
}

打印号码()你试过了吗?(剧透:有效)我试过了,它似乎有效,但我想确保它即使在循环中有更大的数据时也有效,我还想学习正确的方法。但如果你说这是正确的,那就太好了!是的,它会的,对我们来说没有什么意外。但如果您将.forEach与异步函数一起使用,您会发现它不会waitOk,所以for循环是等待的,而不是forEach?这是很好的信息。我已经试过了,它看起来很有效,但我想确保它在循环中有更大的数据时也能正常工作,我还想学习正确的方法。但如果你说这是正确的,那就太好了!是的,它会的,对我们来说没有什么意外。但如果您将.forEach与异步函数一起使用,您会发现它不会waitOk,所以for循环是等待的,而不是forEach?这是很好的信息。我们将进一步研究这个问题