node.js - 组合回调结果

时间:2017-10-19 06:03:01

标签: javascript node.js

我是节点新手,并且对异步编程感到头痛。 我有一个简单的脚本ping我的网络上的设备。 现在我想构建以下内容:如果其中一个设备在网络上,那么我该如何处理回调,以便只有在所有ping终止后才能做出决定?

var exec = require('child_process').exec;

function doThePing(ipaddy){
    exec("ping " + ipaddy, puts);
}

function puts(error, stdout, stderr) { 
    console.log(stdout);

    if (error !== null){
        console.log("error!!!!");
    }
    else{
        console.log("found device!")
    }
}

function timeoutFunc() {
    doThePing("192.168....");
    doThePing("192.168....");
    //if all pings are successful then do..
    setTimeout(timeoutFunc, 15000);
}

timeoutFunc();

1 个答案:

答案 0 :(得分:1)

你可以" Promisify" exec调用,取自文档

const util = require('util');
const exec = util.promisify(require('child_process').exec);

更新ping函数以返回承诺

function doThePing(ipaddy){
  return exec("ping " + ipaddy);
}

然后将所有产生的承诺包装在Promise.all

Promise.all([doThePing("192.168...."),doThePing("192.168....")).then(function(values) {
  // all calls succeeded
  // values should be an array of results
}).catch(function(err) {
  //Do something with error
});