首页 > 解决方案 > 异步编程中的循环

问题描述

我对异步很陌生。编程。我很困惑如何进行迭代。我正在尝试迭代数据库查询。在迭代完成后,我想将用户重定向到主页。这是我的代码:

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('/');

如何做到这一点?谢谢

标签: node.jsasynchronous

解决方案


你会想要映射你的数组而不是做一个 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

推荐阅读