【发布时间】:2020-10-01 07:00:47
【问题描述】:
我正在 node.js 中制作一个非常简单的游戏。在我的 TCP 客户端中,我有一个返回承诺的异步函数,当套接字接收到信息然后关闭时,承诺会解决。我的问题是:当我等待函数时,程序在解决以下示例之前继续运行:
async GetPlayers(player) {
return new Promise(resolve =>{
var net = require('net');
const client = new net.Socket();
client.connect({
port:this.port,
host:this.IpAdress
});
client.on('error',function(error){
console.log('Error : ' + error);
});
client.on('connect',function(){
client.write("sendPlayersToMePls: "+ JSON.stringify(player)+"\n");
var address = client.address();
var port = address.port;
var family = address.family;
var ipaddr = address.address;
});
client.on('data',function(data){
//
var data2 = data.toString();
if(data2.startsWith("hereAreYourPlayers: ")){
if(Config.Verbose)console.log("data = "+data2);
var players2 = data2.slice(20);
var obj = JSON.parse(players2);
that.FileSystem.allPlayers = obj.players;
that.FileSystem.TickCount= parseInt(obj.turnCount);
resolve(obj);
client.end();
}
});
}
//to call it i am using the following
async UpdateMapStatuses(player){
this.SetCurrentMap();
const players = await GetPlayers(player);
return new Promise(resolve => {
//the program starts exectuing this before "players" has been defined
//code that uses "players"
}
}
【问题讨论】:
-
UpdateMapStatuses()函数已经返回了一个承诺 - 为什么你要返回一个承诺的承诺? -
console.log("data = "+data2)输出什么?假设它输出任何东西 -
@JaromandaX 这是有道理的,但返回这个承诺是没有意义的。等待执行并返回结果会更有意义。但正如你所指出的 - 我们不知道意图是什么。
-
这是一个想法……代码看起来不对……不应该是
async function GetPlayers(player) {和async function UpdateMapStatuses(player){- 就像写的那样,这段代码甚至不会解析吗? -
感谢您的 cmets,您帮助我诊断了问题,我确实解决了您所说的低效代码。感谢您的帮助
标签: javascript node.js tcpclient