2014-02-26 128 views
0

我是node.js的新手,對javascript來說比較新。我已經理解回調是如何工作的,並且想要自己嘗試一個功能。這是我的代碼:node.js中的回調函數

MyScript.js:

var calledfunction = function() 

{ 

    console.log("This is a called function"); 

    for(i=0;i<1090660;i++) 

    { 


     console.log(i); 

    } 


    console.log('done'); 

}; 

var sayHello = require('./sayhello.js'); 

objhello = new sayHello(); 

objhello.setupSuite(1,calledfunction); 

console.log('Next statement;'); 

sayhello.js

var _ = require('underscore'); 
module.exports = exports = CLITEST; 

function CLITEST(param1,param2) 
{ 
} 


_.extend(CLITEST.prototype, { 
    setupSuite: function (here,callback) { 
    console.log(here); 
    console.log('This is a callback function'); 
    callback(); 
    } 
    }) 

上述程序是通過執行運行>節點Myscript.js

我的問題是:for循環消耗50秒來執行並打印控制檯和th中的所有數字en僅執行回調函數外部的「Next語句」行。

這是怎麼發生的?因爲我讀了理論,說即時的語句將被執行而不必等待函數被執行。

理想的輸出應該是:打印「Next語句」,然後打印的內容爲循環

但在上述情況下,反之亦然?

+0

嘗試修復您的代碼格式,難以閱讀 – codebox

+0

您的代碼中沒有異步函數,您爲什麼期望它先打印「Next語句」? – thefourtheye

回答

2

正如評論者之一指出,你的代碼以同步的方式執行。函數調用一個接一個地執行,因此沒有魔法發生,並且在執行回調之後執行console.log('Next statement;');調用。如果您處於必須調用執行異步調用的函數(即使用回調進行AJAX調用)的情況,那麼您會希望隨後的console.log在異步調用後立即執行。

換句話說,在你的情況下,代碼表示一個簡單的函數調用,而異步調用將卸載其他地方的回調計算,因此執行調用回調函數的代碼將繼續通過打印聲明並且不會等待回調的執行。