Node.js在基本代码中以正确的顺序驱动事物

时间:2017-02-02 15:16:08

标签: javascript node.js asynchronous

我正在努力使用node.js异步世界,我是node.js中的noob。我不明白如何推动基本的程序流程。我使用package iotdb-arp在网络上打印ip地址和mac地址。我需要运行此代码,执行函数扫描,等待变量arr已满,然后打印arr和结束消息。我知道我应该使用回调,但我真的迷路了。有人能指出我正确的方向,如何按正确的顺序运行?现在当我执行它打印" [+]程序启动",然后它打印"这台机器的IP是:192.168.1.2"然后扫描执行但程序同时进行,arr为空,因为扫描仍在运行。这是我的代码:

console.log("[+] Program start");
var ip = require('ip');
var browser = require('iotdb-arp');
var arr = [];

var myIp = ip.address();

console.log("IP of this machine is : " + myIp.toString());

function scan(){
browser.browser({},function(error, data) {
    if (error) {
        console.log("#", error);
    } else if (data) {
        console.log(data);  
        arr.push(data); 

    } else {

    }    
});
}

/*function callback(){
  console.log(arr);  
  console.log("[+] Program End");
}*/

scan();
console.log(arr); // Here in the end i need print arr
console.log("[!] Program End"); // Here I need print message "[+] Program End"

1 个答案:

答案 0 :(得分:0)

“浏览器”调用中的函数参数是回调。这意味着当“浏览器”功能结束时,它会调用您插入的参数功能。这是您在“扫描”功能中必须执行的操作。

console.log("[+] Program start");
var ip = require('ip');
var browser = require('iotdb-arp');
var arr = [];

var myIp = ip.address();

console.log("IP of this machine is : " + myIp.toString());

function scan(callb){
browser.browser({},function(error, data) {
    if (error) {
        console.log("#", error);
        callb(err);
    } else if (data) {
        console.log(data);  
        arr.push(data); 

    } else {
       callb()
    }    
});
}


scan(function(err){
  if(err) {return;} /// handle error here
  else {
   console.log(arr); // Here in the end i need print arr
   console.log("[!] Program End"); // Here I need print message "[+] Program End"
}


});