2016-01-20 55 views
0

我在javascript/knockout中有一個fileupload實用程序。在我的viewmodel我打電話.upload()是異步xhr類型請求的功能。當所有XHR請求完成我想要的視圖模型知道的是:通知ViewModel模型完成?

this.upload = function() { 
    var self = this; 
    for (var i = 0; i < self.files().length; i++) { 
     self.files()[i].upload(); 
    } 

    this.uploadComplete(true); 
}; 

當然this.uploadComplete(true);不起作用,因爲調用是異步。從模型返回視圖模型的上傳完成的正確方式是什麼?(注意可以有多個文件)。

回答

2

文件'upload方法應該返回一個Promise(或類似的東西)。你可以收集他們在一個陣列,然後

Promise.all(arrayOfPromises).then(function() { 
    self.uploadComplete(true); 
}); 
+0

謝謝羅伊。從來沒有機會使用諾言(儘管我聽了很多次這個詞)。像魅力一樣工作。因爲我們已經有了對jQuery的依賴,所以我決定使用jQuery的承諾。 – coding4fun