gpt4 book ai didi

javascript - Discord.js等待网络套接字连接

转载 作者:行者123 更新时间:2023-12-03 12:02:31 24 4
gpt4 key购买 nike

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

            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放在那里,文本等于“”。我如何等待他之前完成连接?

最佳答案

您可以使用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);
})();

关于javascript - Discord.js等待网络套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63190744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com