bugfix> javascript > 投稿

私はこのようなコードを持っています:

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 件
  • すべての非同期リクエストを保持する配列を作成します。そう

    const promises = [];
    promises.push(async request 1);
    promises.push(async request 2);
    ...
    Promise.all(promises).then(result => {
     // do something ...
    })
    
    

    また、コードを少しリファクタリングして、async/awaitを使用してこれらの括弧の一部を削除します。これらの入れ子になった約束をすべて読むのは難しいです。

あなたの答え