javascript - 如何使用 promise map 实现嵌套循环
问题描述
我有这样的代码:
Promise.all(venue.map(venue => {
return Promise.all(concat_all.map(tgl => {
pool.query("INSERT INTO peminjaman_venue VALUES (?,?,?,?,?,?,?,?,?,?,?)",
[id_event, venue, nama_lengkap_peminjam, jabatan_nim_peminjam, jumlah_personel,
id_google_calendar, waktu_mulai_rutin, waktu_selesai_rutin, tgl,
tgl, fasilitas_lain],
function (err, rows, fields) {
if (err) throw err;
})
}))
}).then(
req.flash('message_success', 'Berhasil mengajukan event'),
res.redirect('/pengajuan_event'))
.catch(
req.flash('message_err', 'Gagal mengajukan event'),
res.redirect('/pengajuan_event')
))
发送后代码返回错误 Can't set header,表示 res.redirect() 被多次调用。但代码有效。数据成功插入数据库。我更改了下面的代码,但代码根本不起作用。
Promise.all(venue.map(venue => {
return Promise.all(concat_all.map(tgl => {
pool.query("INSERT INTO peminjaman_venue VALUES (?,?,?,?,?,?,?,?,?,?,?)",
[id_event, venue, nama_lengkap_peminjam, jabatan_nim_peminjam, jumlah_personel,
id_google_calendar, waktu_mulai_rutin, waktu_selesai_rutin, tgl,
tgl, fasilitas_lain],
function (err, rows, fields) {
if (err) throw err;
})
}))
}).then(() = >{
req.flash('message_success', 'Berhasil mengajukan event')
res.redirect('/pengajuan_event'))
}
.catch((err) => {
req.flash('message_err', 'Gagal mengajukan event')
res.redirect('/pengajuan_event')
}
)
)
解决方案
我会创建一个数组来保存你所有的异步请求。所以
const promises = [];
promises.push(async request 1);
promises.push(async request 2);
...
Promise.all(promises).then(result => {
// do something ...
})
我还会稍微重构代码以使用 async/await 删除其中一些括号。所有这些嵌套的 Promise 很难阅读。
推荐阅读
- machine-learning - 使用 CLAHE 函数处理图像时出现错误 (-215)
- css - 当侧边栏出现时,仍然可以通过侧边栏看到页面中的其他按钮
- arrays - 当我在数组中使用 find 时我得到 null - redux
- android - FCM 令牌未生成
- javascript - 如何重用three.js片段着色器输出
- c# - 如何在 React Tabulator 中添加下载数据选项
- swift - Swift - Sprite Kit 浮动气泡粘在角落
- python-3.x - Python:在for循环中用一行描述在列表中的每个元素之间插入空格
- javascript - 在样式元素上使用标题属性时出现问题
- asp.net-core - 从 ASP.NET Core 中的 Ajax 获取数据不起作用?