Boucler dans une boucle for puis appeler une fonction JS

Aug 19 2020

Donc, je ne peux pas le faire opter pour le facteur plus d'un objet. quand je le console.log, j'obtiens tous les objets du tableau (battletags que j'ai retirés et remplacés par 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);
                })
            })
         })
         });

Cette erreur provient soit d'un lancer à l'intérieur d'une fonction asynchrone sans bloc catch, soit du rejet d'une promesse qui n'a pas été gérée avec .catch(). Pour mettre fin au processus de nœud en cas de rejet de promesse non gérée, utilisez l'indicateur CLI--unhandled-rejections=strict(voir https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (identifiant de rejet : 1) (nœud : 19134) [DEP0018] DeprecationWarning : les rejets de promesses non gérées sont obsolètes. À l'avenir, les rejets de promesses qui ne sont pas gérés mettront fin au processus Node.js avec un code de sortie différent de zéro.

Réponses

1 Kumar Aug 19 2020 at 10:05

On dirait que API.MWBattleData('Player1')retourne une promesse. Ensuite, vous pouvez y parvenir via Promise.all, qui résoudra toutes les promesses de manière séquentielle et vous renverra un tableau de résultats pour toutes les promesses

// 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;
    })
  })

Laissez-moi savoir si cela fonctionne pour vous

elpmid Aug 19 2020 at 10:05

Vous pouvez utiliser la méthode promise.all() pour créer une promesse itérable qui résout un tableau des résultats promis par l'entrée. Voir docs : Promise.all()

J'en déduis que vous avez un tableau d'utilisateurs.

const players = [player1, player2, player3];

Pour créer une entrée de promesse à partir d'eux, vous pouvez le faire comme ceci en utilisant la méthode array.map qui renvoie un tableau.

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

Les valeurs renvoyées sont un tableau de sortie par les promesses créées à partir de votre tableau de joueurs. J'espère que cela aide. Acclamations