Javascript push ein Versprechen in ein array

Ich versuche, ein array zu erstellen, der verspricht, und rufen Sie mit Promise.all.

Ich habe Probleme mit dem korrekten betätigen der Funktionen in die Reihe, es scheint, Sie sind aufgerufen, anstelle von eingefügt und warten Promise.all().

function findSpecialAbility(players, gameId, message) {
  return new Promise(function(resolve, reject) {
    let playersWithSpecials = _.reject(players, function(p) {
      return p.role === 'alphaWolf' ||
        p.role === 'betaWolf' ||
        p.role === 'villager' ||
        p.role === 'alchemist' ||
        p.targetId === 0 ||
        p.abilityUsed === true;
    });
    if (playersWithSpecials.length === 0) {
      resolve();
    } else {
      let specialsToUse = [];
      for (let i = 0, j = playersWithSpecials.length; i < j; i++) {
        specialsToUse.push(useSpecialAbility(playersWithSpecials[i], gameId, message, players));
      }
      //Promise.all(specialsToUse).then(r = > console.log(r));
    }
  });
}


//Using promise below because some of the role will have database updates.
function useSpecialAbility(playerData, gameId, message, players) {
  return new Promise(function(resolve, reject) {
    if (playerData.role === 'seer') {
      let getTargetData = _.find(players, {
        id: playerData.targetId
      });
      message.guild.members.get(playerData.id).send(`Your target is a ${getTargetData.role}!`);
      resolve('foo');
    }
  });
}
  • Gut.. Sie sind Aufrufen der Funktion, wenn Sie versuchen, fügen Sie es zu Ihrem array. Tipp: sobald Sie offen, dass der Konstruktor es ausgeführt werden.
  • Ja, ich bin mir bewusst, das Problem, ich weiß einfach nicht, wie man sich es...
  • Sie können Objekte verwenden, übergeben Sie in der Funktion ohne Konstruktor und führen Sie es in useSpecialAbility.
  • Hätte noch einen flow control Problem
InformationsquelleAutor Trax | 2017-11-06
Schreibe einen Kommentar