Как реализовать вложенный цикл с картой обещаний - PullRequest
0 голосов
/ 24 мая 2018

У меня есть такой код:

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')
    ))

Код возвращает ошибку. Невозможно установить заголовок после их отправки, что указывает на то, что 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')
    }
    )
)

1 Ответ

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

Я бы создал массив для хранения всех ваших асинхронных запросов.Так что

const promises = [];
promises.push(async request 1);
promises.push(async request 2);
...

Promise.all(promises).then(result => {
 // do something ...
})

Я бы также немного изменил код, чтобы использовать async / await для удаления некоторых из этих скобок.Трудно читать со всеми этими вложенными обещаниями.

...