Javascript 异步编程循环处理

  1. 问题:ping 多个IP地址,按照顺序依次ping每一个IP,根据返回的结果,决定是否要ping下一个IP。
  2. ping函数操作
    var ping = require('ping');
    var hosts = ['192.168.1.1', 'google.com', 'yahoo.com'];
      hosts.forEach(function(host){
           ping.sys.probe(host, function(isAlive){
               var msg = isAlive ? 'host ' + host + ' is alive' : 'host ' + host + ' is dead';
               console.log(msg);
        });
    });
    
  3. 使用Promise创建ping操作的函数pingResult
    function pingResult(ip_address){
        return new Promise(function(resolve, reject){
              ping.sys.probe(ip_address, function(active){
                  var info = active ? 1 : 0;
                  console.log("当前ping的ip: " + ip_address + " ping_result: " + info);
                  resolve(info);
            })
        })
    }
    
  4. 循环操作for
    async function processArray(array){
          var result = 0
          for (const element of array){
              var res = await pingResult(element);
              if(res == 1){ //一旦ping成功就退出循环。失败的话就继续下一个ping。
                  result = 2;
                  break;
              }
          };
          return result;
    }
    
  5. 用例测试
    var hosts = ["www.baidu.com", "www.jd.com", 
                       "www.csdn.net", "www.qq.com", 
                        "store.steampowered.com", "www.tmall.com", 
                        "www.taobao.com", "www.microsoft.com", "www.ibm.com"]
    var outer_status = await processArray(hosts); //成功的话就是2。
    

参考:
JavaScript 循环:如何处理 async/await

你可能感兴趣的:(Javascript 异步编程循环处理)