pan*_*hro 5 javascript jquery promise jquery-deferred
我有这门课:
(function(){
"use strict";
var FileRead = function() {
this.init();
};
p.read = function(file) {
var fileReader = new FileReader();
var deferred = $.Deferred();
fileReader.onload = function(event) {
deferred.resolve(event.target.result);
};
fileReader.onerror = function() {
deferred.reject(this);
};
fileReader.readAsDataURL(file);
return deferred.promise();
};
lx.FileRead = FileRead;
}(window));
Run Code Online (Sandbox Code Playgroud)
该类在循环中调用:
var self = this;
$.each(files, function(index, file){
self.fileRead.read(file).done(function(fileB64){self.fileShow(file, fileB64, fileTemplate);});
});
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法在循环完成后调用一个方法,并且self.fileRead已经返回循环中的所有内容?
即使一个或多个延迟失败,我希望它调用该方法.
$.when 可以让你将多个 Promise 包装成一个。其他 Promise 库也有类似的东西。构建 fileRead.read 返回的 Promise 数组,然后将该数组传递给 $.when 并将 then/done/fail/always 方法连接到 .when 返回的 Promise
// use map instead of each and put that inside a $.when call
$.when.apply(null, $.map(files, function(index, file){
// return the resulting promise
return self.fileRead.read(file).done(function(fileB64){self.fileShow(file, fileB64, fileTemplate);});
}).done(function() {
//now everything is done
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |