Melakukan perulangan melalui for loop kemudian memanggil fungsi JS

Aug 19 2020

Jadi saya tidak bisa mendapatkannya ke optput ke tukang pos lebih dari satu objek. ketika saya console.log itu saya mendapatkan semua objek dari array (battletags yang ive diambil dan diganti dengan player)

        router.get('/cod/', (req, res) => {
        const pdata = {}
        console.log(req.params)
        API.login(process.env.EMAIL, process.env.PASSWORD).then((output) => {
       
        // Players array,
        players = ['player1', 'player2', 'player3']
        // map through array and create promise for each player and store it in an array
        promises = players.map(player => API.MWBattleData(player))
        // Pass all promises to Promise.all
        // Result will be an array of individual output of each promise
        Promise.all(promises)
            .then(result => {
                // Loop through result, and assign the output to pdata
                result.forEach((output, index) => {
                    // index + 1 because starting index will be zero
                    pdata[`p${index + 1}`] = output
                    res.json(pdata);
                })
            })
         })
         });

saya mendapatkan kesalahan di node konsol: 19134) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Tidak dapat mengatur header setelah dikirim ke klien di ServerResponse.setHeader (_http_outgoing.js: 518: 11) di ServerResponse.header (/ Users / jaredschau / Desktop / cod-tracker / node_modules / express / lib / response.js: 771: 10) di ServerResponse.send (/Users/jaredschau/Desktop/cod-tracker/node_modules/express/lib/response.js:170:12) di ServerResponse.json (/Users/jaredschau/Desktop/cod-tracker/node_modules/express/lib/response.js:267:15) di /Users/jaredschau/Desktop/cod-tracker/routes/posts.js:29: 25 di Array.forEach () di /Users/jaredschau/Desktop/cod-tracker/routes/posts.js:26:24 di processTicksAndRejections (internal / process / task_queues.js: 97: 5) (node: 19134) UnhandledPromiseRejectionWarning: Penolakan janji yang tidak tertangani.Error ini berasal baik dengan memasukkan ke dalam fungsi async tanpa blok catch, atau dengan menolak sebuah promise yang tidak ditangani dengan .catch (). Untuk menghentikan proses node pada penolakan promise yang tidak tertangani, gunakan flag CLI--unhandled-rejections=strict(lihat https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (ID penolakan: 1) (node: 19134) [DEP0018] DeprecationWarning: Penolakan janji yang tidak tertangani tidak berlaku lagi. Di masa mendatang, penolakan promise yang tidak ditangani akan menghentikan proses Node.js dengan kode keluar bukan nol.

Jawaban

1 Kumar Aug 19 2020 at 10:05

Sepertinya API.MWBattleData('Player1')mengembalikan janji. Kemudian Anda dapat mencapai ini melalui Promise.all, yang akan menyelesaikan semua janji secara berurutan dan mengembalikan Anda serangkaian hasil untuk semua janji

// Players array,
players = ['player1', 'player2', 'player3', ...]

// map through array and create promise for each player and store it in an array
promises = players.map(player => API.MWBattleData(player))

// Pass all promises to Promise.allSettled
Promise.allSettled(promises)
  .then(result => { // Result will be an array of individual output of each promise

    // Loop through result, and assign the output to pdata
    result.forEach((output, index) => { 
      // index + 1 because starting index will be zero
      pdata[`p${index + 1}`] = output.value;
    })
  })

Beri tahu saya jika itu berhasil untuk Anda

elpmid Aug 19 2020 at 10:05

Anda bisa menggunakan metode promise.all () untuk membuat janji berulang yang menyelesaikan larik hasil yang dijanjikan masukan. Lihat dokumen: Promise.all ()

Saya menyimpulkan bahwa Anda memiliki berbagai pengguna.

const players = [player1, player2, player3];

Untuk membuat input promise, Anda dapat melakukannya seperti ini dengan menggunakan metode array.map yang mengembalikan array.

Promise.all(players.map(player => API.MWBattleData(player))).then(values => console.log(values))

Nilai yang dikembalikan adalah larik keluaran dengan janji yang dibuat dari larik pemain Anda. Saya harap ini membantu. Bersulang