javascript - Array.push 在 while 循环外为空
问题描述
如果我在循环内使用 console.log,则 Array.push 可以正常工作。但是,数组在循环外是空的。关于为什么的任何想法?
它之前工作正常,我改变了一些东西,即使我撤消了更改,数组也一直是空的。
this.router.post('/hello', async(req, res) =>{
console.log("We are in");
var connection = mysql.createConnection({
host : 'host12',
user : 'root12',
password : 'password12',
database : 'db12',
});
var count = req.body.count;
console.log("the count:" +count);
while(i<count) {
connection.query('INSERT INTO x (DateM) VALUES ("2021-10-10")', function (error, result, field) {
if (error) {
console.log("Insert Error: " + error);
} else {
insertID = result.insertId;
connection.query("UPDATE table SET mitID =" +insertID "where ID=" + insertID, function (errors, results, fields) {
if (errors) {
console.log("Update Errors: " + errors);
} else {
console.log(results);
var cId = Q + insertID;
idList.push(cId);
}
});
}
});
i++;
}
console.log(idList);
res.json(idList);
});
谢谢!
解决方案
while(i<count) {
connection.query('INSERT INTO x (DateM) VALUES ("2021-10-10", ...
}
console.log(idList);
res.json(idList);
问题是您在那里定义了回调connection.query
并进行了操作idList
。
这部分res.json(idList);
实际上是在query
完成之前运行的。
要修复它,您需要使用await
.
while(i < count) {
let {error, result, field} = await connect.query(...query);
...copy callback function body here
i+++
}
...
推荐阅读
- r - 将名称包含特定字符串的所有数据框放入单个列表中
- google-bigquery - 如何知道 BigQuery 流缓冲区中的数据不可用?
- java - Android Studio:偏好 android:summary="%s",但有一定的默认摘要
- python - 如何使用 Python 计算两个日期之间的天数?
- javascript - 使用 requirejs 进行引导表本地化会出现错误“无法读取未定义的属性 'locales'”
- spring-boot - 使用 Jmeter 测试后,Spring Boot 的容器内存使用率不低 - Kubernetes
- javascript - VueJS中需要把这个对象改成这个对象数组
- javascript - 在 vue / element ui 对话框中有条件地删除注入的元素
- javascript - React 等待父组件渲染
- css - 本地字体到 scss 文件的反应