Циклы в асинхронном программировании - PullRequest
0 голосов
/ 11 мая 2018

Я довольно новичок в асинхронности. программирование. Я путаю, как делать итерацию. Я пытаюсь повторить дБ запросов. И сразу после итерации я хочу перенаправить пользователя на домашнюю страницу. Вот мой код:

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

Как этого добиться? Спасибо

1 Ответ

0 голосов
/ 11 мая 2018

Вы захотите отобразить свой массив вместо выполнения цикла for.Поскольку это асинхронный режим, вам нужно обернуть .map в Promise.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
...