2015-04-17 35 views
0

我有一個異步函數,不應該執行另一個異步請求,直到前一個完成。順序化異步函數調用與WinJS.Promise

pendingCatalogRequest = WinJS.Promise.as(); 
loadCatalogAsync = function(name) { 
    var loadAsync = function() { 
     return getXmlAsync("catalogdata/" + name); 
    } 
    return pendingCatalogRequest = pendingCatalogRequest.then(loadAsync, loadAsync); 
} 

這是處理這個問題的正確方法嗎?或者我錯過了什麼?

loadCatalogAsync函數剩下時,loadAsync會關閉垃圾回收嗎?

回答

0

這是處理這個問題的正確方法嗎?

是的,這似乎很好。

或者我錯過了什麼?

請考慮拒收會發生什麼 - 它們會阻止您的整個隊列。你可能想要.catch他們的排隊承諾。有關更完整的示例,請參閱here

loadCatalogAsync函數剩下時,loadAsync會關閉垃圾回收嗎?

不,它會在運行後得到垃圾回收,直到pendingCatalogRequest.then方法仍然持有對它的引用。

+0

>考慮拒收會發生什麼 - 他們會阻止你的整個隊列。你可能想要抓住他們的排隊承諾。 我不趕上他們的錯誤處理程序? >請參閱這裏獲取更完整的示例。 不幸的是這個例子不是WinJS。 – philk

+0

糟糕,我一定錯過了你的錯誤處理程序。當你將jQuery的'$ .when()'交換到'WinJS.Promise.as()'時,鏈接的代碼應該可以工作,其餘的與實現無關。 – Bergi

+0

仍然看不到你的代碼與我的不同嗎?你能解釋一下嗎? – philk