2012-06-08 73 views
2

我有Javascript的問題,以便在調用下面的行之前完成某個功能。前一個函數包括Javascript MYSQL查詢調用(node.js的一個庫)。然後,它會看起來像:Javascript等待函數結束,包括來自node.js的異步MYSQL查詢?

function first() { 
    /** 
    * a lot processes to execute 
    * including Asynchronous processes 
    * like running Queries using Javascript MYSQL Library from node.js 
    */ 
    console.log("I am the first one!"); 
} 

first(); 
console.log("I am the second one!"); 

然後當我執行此,它的發生,如:

I am second one! 
I am first one! 

如何使他們通過保持隊列的順序運行?

注:現在大家誰混淆了問題,請跳/再跟着我的新創建的問題:
請大家跟隨/跳進這​​個新的問題:Node.js MYSQL to detect the INSERT/UPDATE completeness of a Query?

+7

[不,它不會發生這種情況。](http://jsfiddle.net/FxSZS/) –

+0

除非在第一個方法中有異步操作。 – Jivings

+2

您的第一條線是否駐留在異步回調中?因爲你所說的話不可能發生。 –

回答

1

傳遞一個回調到2函數調用第一個函數。在第1函數結束時,調用theh回調:

function one(parm, callback) { 
    // do something 
    callback(); 
} 
function two() { 
    // do something else 
} 

one("my parm", two); 
1

您將需要構造代碼,以使用回撥

function first (callback) { 

// do your stuff 

callback.call(); 
} 

first(function() { console.log("I am the second"; }); 
1

您遇到的問題是很常見的人誰了JavaScript之前在其他語言編程,如c/java,你認爲JavaScript將做到以下幾點:

Line of code1. Execute,when it's done go to the next. 
Line of code2. Execute,when it's done go to the next. 
Line of code3. Execute,when it's done go to the next. 

什牛逼實際發生在JavaScript更像是:

Line of code1. Execute 
Line of code2. Execute 
Line of code3. Execute 

對於JavaScript如您所願,你需要給它一個面向事件的方法程序協同工作,這意味着,你需要指定要在什麼特定的順序運行,其功能。要在JavaScript爲此,您需要做的callbacks使用,例如:

function1 (parameter A,function2){ 
     //... 
     function2(parameter B,function3)} 

function2 (parameter B,function3){//...} 

function3(){//...} 

你可以概括上述多個示例,但是我想離開它這樣使得它更容易理解。你可以在網上找到許多關於此的文章。 google搜索的第一個結果給了我這個link

快樂編碼!