繁体   English   中英

等待的承诺在继续之前不等待解决()

[英]awaited promise not waiting for resolve() before contuining

我正在 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"
        }

}

尝试将您的client.on回调转换为箭头函数,看看是否有帮助。 例如:

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', (error) => {
            console.log('Error : ' + error);
          });
          
        client.on('connect', () => {
          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', (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();
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM