2016-10-13 8 views
1

Ausführung Ich habe diesen Code in Knoten jsKnoten JS Rückrufe in sychronously

var PrintFirstName = function(first_name , cb) { 
    cb("First name is "+first_name) ; 
} 
PrintFirstName("Tushar" , function(res){ 
    for(var i = 0 ; i < 100000; i++) { 
     console.log(i); 
    }  
    console.log("processing callback"); 
}); 
console.log("Code continue....") ; 

Wie Rückrufe in der Natur asynchron sind, sollte meine erwartete Reihenfolge der Ausführung sein-Code fortsetzen, Zahlen 1-10000 und dann Rückrufe Verarbeitung

Aber wenn ich das oben laufen lasse, werde ich als Zahlen 1-10000 ausgegeben, Callbacks bearbeitend und dann Code fortfahren. Code continue sollte zuerst ausgeführt werden. Warum es auf Callbacks wartet, um abzuschließen.

Antwort

1

Der Code, den Sie geschrieben haben, ist nicht asynchron, normalerweise müssen asynchrone Funktionen in JavaScript das Ausdruckargument manuell auf setTimeout oder setInterval aufbauen.

In Ihrem Fall:

var PrintFirstName = function(first_name , cb) { 
    cb("First name is "+first_name) ; 
} 

PrintFirstName("Tushar" , function(res){ 
     for(var i = 0 ; i < 100000; i++) { 
      console.log(i); 
     }  
setTimeout(function() {  console.log("processing callback");}, 0); 
}); 

console.log("Code continue....") ; 

Aber denken Sie daran, dass dies nicht funktionieren wird, wenn Anrufe auf Objektmethoden machen

Werfen Sie einen Blick hier http://devedge.primedirective.net/toolbox/examples/2003/CCallWrapper/index.html