【问题标题】:Discord.js Await net.Socket connectionDiscord.js 等待 net.Socket 连接
【发布时间】:2020-11-21 05:40:02
【问题描述】:

我正在创建一个不和谐的机器人来检查服务器的状态。 我对这个代码部分有一些问题:

            var text = "";
            
            var hosts = client.getHosts.all(channel.guild.id);
            hosts.forEach(function(item) {
                var sock = new net.Socket();
                sock.setTimeout(2500);
                sock.on('connect', function() {
                    text += item.name + ": ONLINE ✅";
                    sock.destroy();
                }).on('error', function(e) {
                    text += item.name + ": OFFLINE ⛔";
                }).on('timeout', function(e) {
                    text += item.name + ": OFFLINE ⛔";
                }).connect(item.port, item.ip);
            });
            
            console.log(text);

如果我把console.log 那里的文本等于“”。我怎么能等待他之前完成连接?

【问题讨论】:

  • 你试过用map代替forEach吗?

标签: javascript sockets async-await discord discord.js


【解决方案1】:

您可以使用for 循环:

const getStatusOfSocket = (item) => {
    return new Promise((resolve) => {
        var sock = new net.Socket();
        sock.setTimeout(2500);
        sock.on('connect', function() {
            sock.destroy();
            resolve(true);
        }).on('error', function(e) {
            resolve(false);
        }).on('timeout', function(e) {
            resolve(false);
        }).connect(item.port, item.ip);
    });
};

var text = "";
            
var hosts = client.getHosts.all(channel.guild.id);
for(let item of hosts){
    const isOnline = await getStatusOfSocket(item);
    if(isOnline) text += item.name + ": ONLINE ✅";
    else text += item.name + ": OFFLINE ⛔";
}

console.log(text);

请注意,当我使用await 时,您的代码应该在异步函数中。这可以通过以下方式轻松完成:

(async () => {
    const getStatusOfSocket = (item) => {
        return new Promise((resolve) => {
            var sock = new net.Socket();
            sock.setTimeout(2500);
            sock.on('connect', function() {
                sock.destroy();
                resolve(true);
            }).on('error', function(e) {
                resolve(false);
            }).on('timeout', function(e) {
                resolve(false);
            }).connect(item.port, item.ip);
        });
    };

    var text = "";
                
    var hosts = client.getHosts.all(channel.guild.id);
    for(let item of hosts){
        const isOnline = await getStatusOfSocket(item);
        if(isOnline) text += item.name + ": ONLINE ✅";
        else text += item.name + ": OFFLINE ⛔";
    }

    console.log(text);
})();

【讨论】:

    猜你喜欢
    • 2014-11-05
    • 2020-07-02
    • 2021-12-30
    • 2020-08-24
    • 2020-12-05
    • 1970-01-01
    • 2015-11-16
    • 2016-10-23
    • 2023-03-09
    相关资源
    最近更新 更多