我遇到了這個問題,我無法通過Google搜索找到解決方案。
我有一個庫,我正在使用(並且不想編輯,除非真的有必要),它允許用戶選擇一個項目,然後調用我的自定義回調函數來修改該項目,然後繼續與它合作。
我需要對其執行一些異步任務,這可能需要一些時間。這會創建競爭條件,因爲當回調函數完成時,我的異步任務尚未完成,並且庫繼續處理項目。
library.onItemSelectionCallback = function (item) {
myService.modifyItem(item).then(
function (modifiedItemProperty) {
item.newProperty = modifiedItemProperty;
});
myService.anotherModifyItem(item).then(
function (modifiedItemProperty) {
item.existingProperty = modifiedItemProperty;
});
}
如何等待我的兩個異步任務完成,讓這個回調結束之前?
我能想到的唯一事情就是循環着,每隔幾百毫秒睡一會兒,直到兩個承諾都已解決,但這似乎不是一個很好的解決方案。
據我所知,這使得異步請求非常同步,並可能對用戶體驗不利,但實際上並沒有看到另一種出路。
編輯:我知道,我和消除問題的一般性質,從而使它過於本地化,我會說,我試圖用angular-file-upload模塊,特別是冒着,試圖安裝一個定製imageService
,這會在上傳之前調整圖片的大小。我正在將它掛在onBeforeUploadItem回調上。這個想法是,創建調整大小的圖像可能需要一段時間,這就是爲什麼我需要從我的imageService
返回承諾,這需要在上傳之前解決。
不,如果該庫無法處理異步選擇回調,則需要對其進行編輯(或向上遊發送功能請求)。這是沒有辦法的。甚至不要嘗試像忙碌的等待。 – Bergi
我發現不幸的是,[angular-file-upload](https://github.com/nervgh/angular-file-upload)模塊的作者選擇使用原生HTML 5上傳,而不是使用AngularJS'$ http'服務。我建議您避免使用該模塊及其API。 – georgeawg