node.js - 异步编程中的循环
问题描述
我对异步很陌生。编程。我很困惑如何进行迭代。我正在尝试迭代数据库查询。在迭代完成后,我想将用户重定向到主页。这是我的代码:
for(var i =0; i < venue_1_split.length; i++){
pool.query("INSERT INTO peminjaman_venue VALUES (?,?,?,?,?,?,?,?)",
[id_event, venue_1_split[i], id_google_calendar,
waktu_mulai_1, waktu_selesai_1, tanggal_peminjaman_1,
tanggal_peminjaman_1, hari_event_rutin],
function(err, rows, fields){
if(err) throw err;
})
}
//when the iteration is done.
res.redirect('/');
如何做到这一点?谢谢
解决方案
你会想要映射你的数组而不是做一个 for 循环。由于这是异步的,因此您需要将您的内容包装.map
在 aPromise.all
和调用.then
中,以确保它在继续之前等待所有承诺。像这样的东西应该适用于您正在尝试做的事情:
Promise.all(venue_1_split.map(venue => {
return new Promise((res, rej) => {
pool.query(
"INSERT INTO peminjaman_venue VALUES (?,?,?,?,?,?,?,?)",
[id_event, venue], id_google_calendar,
waktu_mulai_1, waktu_selesai_1, tanggal_peminjaman_1,
tanggal_peminjaman_1, hari_event_rutin],
(err, rows, fields) => {
if(err) rej(err)
res()
})
}
}))
.then(r => res.redirect('/'))
.catch(err => {console.log(err); res.status(500).send()}) // or whatever you want to do with errors
推荐阅读
- angular - 如何从库中导入组件(在 nrwl/nx 中使用 Angular)
- google-apps-script - 使提交按钮关闭对话框并将焦点返回到电子表格谷歌应用程序脚本
- html - 如何在表单字段中保存和显示先前输入的值?
- php - 带有 Doctrine ORM 的 MappingException - 类不存在
- flutter - 在颤动中按下按钮弹出对话框
- vue.js - 如何在 nuxt.js 中实现 ag-grid
- sapui5 - 在 sapUI5 XML 视图中放置动态表
- excel - 使用 Excel 中的下拉菜单在工作表中插入命名的文本范围
- stm32 - I2c 从机 HAL 发送
- python - 为什么即使我的模型没有用户作为主键,我也会收到 userId 重复键错误?