2013-01-08 66 views
0

因此,我遇到了一種情況,我需要將異步數據庫調用放入我的自定義函數中。例如:保持Node.js異步的問題

function customfunction(){ 
    //asynchronous DB call 
} 

然後我從我的程序的另一個點調用。首先,爲了安全起見,這仍然是異步的嗎? (我會假設這是繼續我的問題)。我想從這裏做的是在完成異步數據庫調用時調用另一個特定的函數。我知道數據庫調用會在完成時觸發一個回調函數,但問題是這個自定義函數是非常通用的(意味着它將從我的代碼中的許多不同點被調用),所以我不能在回調中放置特定的方法調用功能,因爲它不適合所有情況。如果還不清楚我在說什麼,我將在下面提供的例子我想這樣做:

//program start point// 
customfunction(); 
specificfunctioncall(); //I want this to be called DIRECTLY after the DB call finishes (which I know is not the case with this current setup) 
} 

function customfunction(){ 
    asynchronousDBcall(function(err,body){ 
    //I can't put specificfunctioncall() here because this is a general function 
    }); 
} 

如何使上述工作的情況?

謝謝。

回答

4

這是你如何做到這一點:

//program start point// 
customfunction(specificfunctioncall); 

和customfunction():

function customfunction(callback){ 
    asynchronousDBcall(function(err,body){ 
     callback(); 
    }); 
} 

功能只是數據,你可以繞過就像字符串和數字。事實上,使用匿名函數包裝function(){...},您可以將CODE作爲可以傳遞的數據。

所以,如果你想一些代碼來對數據庫調用,而不是一個功能的完成執行只是這樣做:

customfunction(function(){ 
    /* some code 
    * you want to 
    * execute 
    */ 
}); 
+0

真棒,謝謝! :) – Ari

1

Jay, 如果asyncDbCall是一個數據庫庫函數,那麼它將具有回調函數作爲其參數之一(如果它是一個真正的異步函數)。將specificFunctionCall作爲參數傳遞給該函數並完成。

function CustomFunction{ 
    asyncDbCall(.....,specificFunctionCall); 
} 

現在就打電話CustomFunction,它會調用asyncDbCall功能,一旦完成,asyncDbCall會自動調用回調函數。