Recorriendo un bucle for y luego llamando a una función JS
Así que no puedo hacer que opten por enviar al cartero más de un objeto. cuando lo consuelo, lo registro, obtengo todos los objetos de la matriz (etiquetas de batalla que he sacado y reemplazado con el jugador)
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);
})
})
})
});
Este error se originó al lanzar dentro de una función asíncrona sin un bloque catch o al rechazar una promesa que no se manejó con .catch(). Para finalizar el proceso del nodo en caso de rechazo de promesa no controlado, use el indicador CLI--unhandled-rejections=strict
(consulte https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (ID de rechazo: 1) (nodo: 19134) [DEP0018] DeprecationWarning: los rechazos de promesa no controlados están en desuso. En el futuro, los rechazos de promesas que no se controlen terminarán el proceso de Node.js con un código de salida distinto de cero.
Respuestas
Parece que API.MWBattleData('Player1')
devuelve una promesa. Luego, puede lograr esto a través Promise.all
de , que resolverá todas las promesas secuencialmente y le devolverá una serie de resultados para todas las promesas.
// 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;
})
})
Déjame saber si eso funciona para ti
Puede usar el métodopromise.all() para crear una promesa iterable que resuelva una matriz de los resultados que promete la entrada. Ver documentos: Promise.all()
Deduzco que tienes una matriz de usuarios.
const players = [player1, player2, player3];
Para crear una entrada de promesa a partir de ellos, puede hacerlo así usando el método array.map que devuelve una matriz.
Promise.all(players.map(player => API.MWBattleData(player))).then(values => console.log(values))
Los valores devueltos son una matriz de resultados de las promesas creadas a partir de la matriz de jugadores. Espero que ayude. Salud