2014-10-29 53 views
0

我有下一個目標:如何在特定條件下正確回調?

我想有兩個函數 - 開始()和結束()。第一個函數在MyFunc()的開始處運行,第二個函數在MyFunc()的末尾運行。 End()不應該在Start()未完成時運行。

現在,我寫了下面的代碼:

function MyFunc(OnMyFuncReady) { 
    Start(); 
    // do something 
    OnMyFuncReady(); 
} 

function Start() { 
    // start specific actions 
} 

function End() { 
    // end specific actions 
} 

MyFunc(function() { 
    End(); 
}); 

但開始()相異步運行結束()。我如何解決這個問題?

UPDATE1:我檢查的運行,發現一切正常功能的順序,但在Start()我使用jQuery動畫功能,即異步運行...

UPDATE2:現在我有下一個問題: 我想在Start()(其中使用jQuery animate())和MyFunc()完成時運行End()。都。對我來說是艱鉅的任務。

+1

如果'Start'是異步的,那麼你將不得不使用回調機制應該在那裏使用 – 2014-10-29 07:03:53

+0

對不起,這是我的錯誤,我解決它。 – AlexAstanin 2014-10-29 07:04:13

+0

我需要按以下順序運行:MyFunc() - > Start() - > End(); – AlexAstanin 2014-10-29 07:05:55

回答

1

的方式,因爲我看到他們有兩個:

第一要等到您沒有收到來自start()方法的任何響應,然後繼續。一切完成後,傳遞End函數作爲參數。不幸的是,你應該以某種方式分開開始/結束的喋喋不休。這背後的原因是你需要驗證開始是否完成。 End(釋放)函數不應該有這種問題。

第二種方法是用值創建一個變量。一旦你分配了開始,你就會知道發生了什麼。但是,如果你的啓動失敗了,你可能不應該繼續。一旦啓動完成,將空值分配給該變量。之後,您應該檢查它是否爲NULL,並在最後傳遞釋放函數。

的一個很好的例子是傑裏該隱的斯坦福大學課程,看這裏:https://www.youtube.com/watch?v=Yr1YnOVG-4g&feature=PlayList&p=9D558D49CA734A02&index=6

我希望我幫你。如果您有依賴關係並使用資源,歡迎並思考同步方式。