hfbachri_
hfbachri_

Reputation: 107

Iteration in asynchronous programming (Node.js)

I want to iterate insert to db. Right after the iteration is done, I want to generate success message and redirect user to the specific page. That's why I use async package. Here's my code:

async.forEachOf(venue_1_split, function (venue, key, callback) {

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],
                        function(err, rows, fields){
                            if (err) throw err;
                        });

                            req.flash('message_success', 'Berhasil mengajukan event');
                            callback(res.redirect('/pengajuan_event'));
                        }, function (err) {
                            if (err) console.error(err.message);

                        });

It works but seems to be not correct. First, it returns error `

"Can't set headers after they are sent"

And when i checked my db it only inserted 2 rows. The loop stopped on 2nd iteration. Can you fix my code. Thank you.

`

Upvotes: 0

Views: 20

Answers (1)

mandar.gokhale
mandar.gokhale

Reputation: 1875

You are redirecting to /pengajuan_event after every insert. Try following code.

async.forEachOf(venue_1_split, 
  function (venue, key, callback) {
    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
      ],
      callback(err, rows, fields)
    )}, function (err) {
      if(err) {
        console.error(err.message);
      } else {
        req.flash('message_success', 'Berhasil mengajukan event');
        res.redirect('/pengajuan_event')
      }
    }
);

Upvotes: 1

Related Questions