2017-02-02 2 views
0

Ich kämpfe mit node.js asynchrone Welt, ich bin noob in node.js. Ich verstehe nicht, wie man den grundlegenden Programmablauf steuert. Ich verwende das Paket iotdb-arp, um IP-Adresse und MAC-Adresse im Netzwerk zu drucken. Ich muss diesen Code ausführen, Funktionsscan ausführen, warten, bis die Variable arr voll ist, dann diese arr und die Endnachricht ausdrucken. Ich weiß, dass ich Rückrufe verwenden sollte, aber ich bin wirklich verloren. Könnte mir jemand auf die richtige Richtung zeigen, wie man die Dinge in der richtigen Reihenfolge laufen lässt? Jetzt, wenn ich ausführe, dass es "[+] Programmanfang" druckt, dann druckt es "IP dieser Maschine ist: 192.168.1.2" dann wird Scan ausgeführt, aber Programm ist gleichzeitig am Ende, arr ist leer, weil Scan noch läuft. Hier ist mein Code:Node.js Dinge in der richtigen Reihenfolge in grundlegenden Code

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" 
+0

Sie können das nicht tun. Sie müssen Rückrufe verwenden. – SLaks

Antwort

0

Der Funktionsparameter im "Browser" Anruf ist ein Rückruf. Das heißt, wenn die Funktion "browser" endet, ruft sie die eingefügte Parameterfunktion auf. Dies müssen Sie in Ihrer "Scan" -Funktion tun.

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" 
} 


}); 
+0

Danke Dion, es ist viel besser, aber es sieht immer noch so aus, dass callb() 2 mal ausgeführt wird. Also bekomme ich "[!] Programmende" 2 mal. Dies ist ein kurzes Beispiel meiner Ausgabe: {ip: '192.168.1.1', mac: '9C: 5C: 8E: C7: 44: 88', Schnittstelle : 'en0', gesehen: 1486054726758} Programm Ende {ip [!]: '192.168.1.1', mac: '9C: 5C: 8E: C7: 44: 88', Schnittstelle: 'en0', Gesehen: 1486054729261} [!] Programm Ende – Mischa

Verwandte Themen