Ich entwickle ein Multiplayer-Spiel mit vue auf Client-Seite und nojejs als Spielserver (I vue-sockets.io
bin mit Clients und Server zu kommunizieren). Wenn ich die Spielinstanz auf der Knotenseite erstelle, wird sie Kacheln haben und ausgeblendet (beide Bildergruppen stammen von einer API). Dafür werden die Axios verwendet, das Problem ist, dass das erstellte Spiel vor dem Ausführen der Axios an den Client zurückgegeben wird. So erhält der Kunde das Spiel ohne die Bilder.Async axios Dont Versprechen NodeJS mit laufen
createGame(playerName, socketID, boardSize) {
this.contadorID = this.contadorID+1;
var game = new MemoryGame(this.contadorID, playerName, boardSize);
new Promise(function(resolve, reject) {
console.log("a");
game.getTiles().then(response=>{
console.log("getTiles");
game.tiles = game.getRandomNPieces(response.data.data, game.board.length/2);
console.log(game.tiles);
}).catch(function (error) {
console.log(error);
});
console.log('=>' + game.tiles);
}).then(function(result) { // (***)
console.log("b");
game.getHidden().then(response=>{
game.hidden = game.getRandomHidden(response.data.data);
}).catch(function (error) {
console.log(error);
});
}).catch(function (error) {
console.log(error);
});
game.player1SocketID = socketID;
this.games.set(game.gameID, game);
return game;
}
Das Programm erreicht nie den zweiten axios Anruf. Das gameList-Protokoll stammt aus dem Spiel, das an den Benutzer zurückgegeben wird.
Spiel Instanz in Client 1 (die das Spiel erstellt):
Spiel Instanz in Client 2 (das Spiel in der Lobby und hat bereits die Fliesen):
Um Ihnen effizient zu helfen, Sie Sie müssen die relevanten Teile Ihres Codes als Text in die Frage einfügen und als Code formatieren. Dann können wir Teile davon kopieren und einfügen und korrigieren. Der Code sollte nicht nur als externer Link zu einem Bild verfügbar sein. Es sollte als Text in Ihre Frage eingefügt werden. Dies sind die Regeln/Richtlinien des Stack-Überlaufs. Es gibt viele Dinge, die mit Ihrem Code nicht stimmen, aber ich werde nicht den gesamten Code von einem Bild manuell neu eingeben, um Ihnen zu zeigen, wie Sie ihn beheben können. – jfriend00
@ jfriend00 danke für deinen Rat! Ich werde meinen Code hier vorbei! – BLDD
Ich bin nicht sicher, was dieser Code tun soll, da Sie asynchrone Operationen haben, aber versuchen, ein 'Spiel'-Objekt, das noch nicht bearbeitet wurde, zurückzusenden, aber das erste Kernproblem ist, dass Sie' erstellen new Promise() ', aber du nennst niemals' resolve() 'oder' reject() ', um dieses Versprechen zu lösen oder abzulehnen. Was Sie zeigen, ist ein Versprechen Anti-Muster. Es besteht keine Notwendigkeit, eine bestehende Zusicherung von "getTiles()" in eine andere Zusicherung zu verpacken. Sie können einfach das Versprechen verwenden, dass es zurückgibt. Es gibt viele Probleme mit diesem Code. Nicht sicher, was das Ziel ist. – jfriend00