Percorrendo um loop for e chamando uma função JS
Portanto, não posso optar por enviar ao carteiro mais de um objeto. quando eu console.log, eu recebo todos os objetos do array (battletags que eu tirei e substituí pelo jogador)
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 erro originou-se jogando dentro de uma função assíncrona sem um bloco catch ou rejeitando uma promessa que não foi tratada com .catch(). Para encerrar o processo do nó na rejeição de promessa não tratada, use o sinalizador CLI--unhandled-rejections=strict(consulte https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (ID da rejeição: 1) (nó:19134) [DEP0018] DeprecationWarning: As rejeições de promessas não tratadas estão obsoletas. No futuro, as rejeições de promessa que não forem tratadas encerrarão o processo Node.js com um código de saída diferente de zero.
Respostas
Parece que API.MWBattleData('Player1')retorna uma promessa. Então você pode conseguir isso via Promise.all, que resolverá todas as promessas sequencialmente e retornará uma matriz de resultados para todas as promessas
// 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;
})
})
Deixe-me saber se isso funciona para você
Você pode usar o método promise.all() para criar uma promessa iterável que resolva uma matriz dos resultados que a entrada promete. Veja os documentos: Promise.all()
Eu deduzo que você tem uma matriz de usuários.
const players = [player1, player2, player3];
Para criar uma entrada de promessa a partir deles, você pode fazer assim usando o método array.map que retorna um array.
Promise.all(players.map(player => API.MWBattleData(player))).then(values => console.log(values))
Os valores retornados são uma matriz de saída pelas promessas criadas a partir da matriz de jogadores. Espero que ajude. Felicidades