使用Javascript按最快的ping时间对服务器列表进行排序

使用Javascript按最快的ping时间对服务器列表进行排序,javascript,node.js,electron,Javascript,Node.js,Electron,在我的电子应用程序中,我有一个服务器地址列表,需要按最短响应时间排序。我有一个需要排序列表的函数: function start() { // first step, get list of servers var servers_sorted = get_sorted_list_of_servers(); // rest of function } 然后我有一个遍历服务器列表的函数: function get_sorted_list_of_servers() {

在我的电子应用程序中,我有一个服务器地址列表,需要按最短响应时间排序。我有一个需要排序列表的函数:

function start() {
    // first step, get list of servers
    var servers_sorted = get_sorted_list_of_servers();

    // rest of function
}
然后我有一个遍历服务器列表的函数:

function get_sorted_list_of_servers() {
    // access unsorted list from file

    unsorted_servers.forEach((server) => {
        // Get ping times for each server
        // Here is where I am stuck
    });

    // Sort based on ping times....

    return sorted_list_of_servers;
}
问题是我不确定如何获得每个服务器的ping时间。我发现了几个库,它们包装了
ping
实用程序(和)。然而,它们使用回调(考虑到ping服务器可能需要一分钟的时间,这很有意义),我需要某种方法来获取服务器时间列表

// From ping example code
unsorted_servers.forEach(function (server) {
    ping.promise.probe(host).then(function (res) {
        console.log(res);
        // Update a global variable here??
    });
});
我曾经考虑过让回调更新一个全局列表,但是一旦所有服务器都经过测试,我就需要某种方式的信令


感谢您的指导。谢谢

您可以使用
Promise.all
map
在服务器列表上循环,等待所有承诺得到解决。下面是一个使用ping的快速示例:

const sortBy=require('lodash.sortBy');
常量ping=需要('ping');
const servers=['google.com'、'facebook.com'、'amazon.com'、'apple.com'];
Promise.all(servers.map(server=>ping.Promise.probe(server)))。然后(response=>{
log(sortBy(响应,'time'))

});
一旦您进行了
async
操作,链上的所有内容都必须是
async
。。因此,调用函数->
var servers\u sorted=get\u sorted\u list\u of_servers()永远不会发生。