2016-10-13 99 views
1

我在節點JS執行的節點JS回調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....") ; 

由於回調在本質上是異步的,我預期執行的順序應該是碼繼續,數字1-10000這個代碼,然後處理回調

但是,如果我運行上述我得到輸出爲數字1-10000,處理回調,然後代碼繼續。代碼繼續應該先執行。爲什麼它正在等待回調完成。

回答

1

您編寫的代碼不是異步的,通常javascript中的異步函數需要手動爲setTimeout或setInterval構造表達式參數。

你的情況:

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....") ; 

但是請記住,製造上的對象方法的調用時,這是不行的

看看這裏http://devedge.primedirective.net/toolbox/examples/2003/CCallWrapper/index.html