Eseguire il ciclo di un ciclo for quindi chiamare una funzione JS
Quindi non riesco a farlo optare per postino più di un oggetto. quando lo console.log ottengo tutti gli oggetti dell'array (battletag che ho tolto e sostituito con 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);
})
})
})
});
Questo errore è stato originato lanciando all'interno di una funzione asincrona senza un blocco catch o rifiutando una promessa che non è stata gestita con .catch(). Per terminare il processo del nodo in caso di rifiuto della promessa non gestito, utilizzare il flag CLI--unhandled-rejections=strict
(vedi https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1) (node:19134) [DEP0018] DeprecationWarning: i rifiuti di promessa non gestiti sono deprecati. In futuro, le promesse rifiutate che non vengono gestite termineranno il processo Node.js con un codice di uscita diverso da zero.
Risposte
Sembra che API.MWBattleData('Player1')
restituisca una promessa. Quindi puoi raggiungere questo obiettivo tramite Promise.all
, che risolverà tutte le promesse in sequenza e ti restituirà una serie di risultati per tutte le promesse
// 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;
})
})
Fammi sapere se per te va bene
È possibile utilizzare il metodo promise.all() per creare una promessa iterabile che risolve un array dei risultati promessi dall'input. Vedi documenti: Promise.all()
Deduco che hai una serie di utenti.
const players = [player1, player2, player3];
Per creare un input di promessa da essi puoi farlo in questo modo usando il metodo array.map che restituisce un array.
Promise.all(players.map(player => API.MWBattleData(player))).then(values => console.log(values))
I valori restituiti sono un array di output delle promesse create dall'array dei giocatori. Spero possa essere d'aiuto. Saluti