2016-01-20 50 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