Вернуть живые хосты с асинхронными функциями - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь получить список живых хостов через Javascript.Функция в этом отношении должна быть реализована следующим образом:

//getState returns an array of states (up or down) for all the given list of ip addresses
var host_states = getState(list_of_ip_addresses);

Чтобы проверить, жив хост или нет, я использую веб-сокеты:

var ip = "ws://"+current_ip;
var s = new WebSocket(ip);
//if the onerror is called, state host as up
s.onerror= function(){/*state host as up*/};
//after a delay, automatically state host as down
setTimeout(function(){/*state host as down*/},delay);

Посколькусостояние хоста определяется с помощью обратных вызовов (асинхронный), как я могу вернуть состояние одного или нескольких хостов, как в функции выше?(Без опроса)

1 Ответ

0 голосов
/ 23 декабря 2018

Вы можете использовать Promises для одновременного асинхронного возврата всего хоста.

async function getStates(l) {
  let promises = [];
  for(let i in l) {
    let current_ip = l[i];
    promises.push(new Promise((resolve, reject) => {
      let delay = 10;
      var ip = "ws://"+current_ip;
      var s = new WebSocket(ip);
      //if the onerror is called, state host as up
      s.onerror= function(){/*state host as up*/resolve(true)};
      //after a delay, automatically state host as down
      setTimeout(function(){/*state host as down*/resolve(false)},delay);
      
     }));
  };
  console.log(promises);
  const results = await Promise.all(promises);
  return results;
}
getStates([1,2,3]).then(r => console.log(r));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...