【发布时间】:2021-04-07 20:51:54
【问题描述】:
我对 javascript 中带有循环的异步等待有点困惑。我创建了以下代码,其中包含三个数据库查询。但我不确定第三个查询(“deleteData”)是否总是等待 for of 循环在步骤 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();
【问题讨论】:
-
你试过了吗?
-
(剧透:它有效)
-
我已经尝试过了,它似乎可以工作,但我想确保它即使在循环中有更大的数据时也能工作,我也想学习正确的方法。但如果你说这是正确的,那就太好了!
-
是的,它会的,for of 没有任何惊喜。但是如果你使用 .forEach 和 async 函数,你会发现它不会等待
-
好的,所以等待 for 循环而不是 forEach?这是很好的信息。将对此进行更多调查