Je ne peux pas comprendre comment les promesses fonctionnent. Donc je me suis dit que je sauterais juste dedans et essayerais d'en créer un pour voir si ça aide. Mais les rendements suivants d'une valeur non définie (de arrTables):Je ne peux pas obtenir une promesse ES6 pour travailler
app.get("/getTables", function (req, res) {
var arrTables = getTables().then(function(response) {
console.log("getTables() resolved");
console.log(arrTables.length);
console.log(arrTables[1].ID());
}, function(error) {
console.error("getTables() finished with an error");
});
});
function getTables() {
return new Promise(function(resolve, reject) {
while (mLobby.tlbCount() < LOBBY_SIZE) {
var objTable = new Table();
mLobby.addTable(objTable);
}
resolve(mLobby.tables);
});
}
new Table()
fait référence à une classe personnalisée qui fait un appel de base de données async. J'essaye d'utiliser des promesses pour m'assurer que l'appel résout avant que je continue dans le code. Quelqu'un peut-il signaler où je me suis trompé?
est ici la sortie de la console:
getTables() resolved
undefined
(node:6580) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id:
1): TypeError: Cannot read property 'ID' of undefined
Edit pour ajouter: mLobby.tblCount commence comme 0, il fait entrer dans la boucle while.
Vous devez attendre la fin de l'appel de la base de données avant de résoudre le problème. Comment exactement vous faites cela dépend du mécanisme que Table fournit pour savoir quand c'est fait. – skirtle
arrTables.length? n'est-ce pas supposé être response.length? puisque c'est ce que vous avez appelé pour le rappel? – jhek
@skirtle La classe table renvoie depuis l'intérieur d'une fonction de rappel à la fin de ses requêtes de base de données. – erv