2016-03-23 38 views
-1

我正在使用JavaScript進行編碼。
我有兩個函數func1,func2。
func1沒有返回值,func2有返回值。
在function1已經完成之後調用function2

function outFunc(){ 
    func1(); 
    val = func2(); 
    return val; 
} 

func1裏面有異步操作。
如何確保在func1完成後才調用func2?

+1

確實func1有異步操作嗎? – gurvinder372

+1

如果你沒有對'func1'的異步調用,默認情況下它的工作原理是 –

+0

yes,func1裏面有異步操作。 –

回答

1

您將無法從func2返回值。如果您想使用外部返回func2的值,您的outFunc也將具有回叫處理程序。

function outFunc(finalCallback){ 
    func1(func2,finalCallback); 
} 

function func1(callback, finalCallback) 
{ 
//once the asynch operation has finished 
callback(finalCallback); 
} 

function func2(finalCallback) 
{ 
    //compute return-value 
    finalCallback(return-value); 
} 
1

代碼始終按照處理順序執行。

然而,如果func1內部執行異步操作,然後就是去調用不立即返回代碼之外的東西。 func1本身將完成,但操作可能不會。

在這種情況下,func1應該作爲函數參數公開一個回調函數。國內哪家func1結構,直觀與此類似:現在

function func1(callback) { 

    // do some stuff 

    callback(); 

} 

,在do some stuff會有具有相同的警告異步操作,所以func1必須沿着callback通過適當納入的責任這些操作根據需要。這個結構取決於這些操作是什麼,真的。

但問題是任何執行異步操作的函數都應該在該操作完成之後公開一個回調函數。然後,你會用它作爲:

func1(func2); 

不過請注意,您在這兒碰上另一個問題。因爲func1是異步的,所以outFunc也是異步的。這意味着,這是行不通的:

return val; 

outFunc會異步操作(一個或多個)完成之前完成。所以沒有任何價值會被返回。 this highly-linked question有一些非常好的深入解釋。但基本上,您將需要重新考慮如何構建代碼。在這個問題中提供的人爲的例子並不真正適合於這方面的建議。

而不是返回值,您需要提供回調。通常使用返回值執行某些操作的代碼將被放入回調中,並在稍後可用時執行該操作。

相關問題