我正在循环遍历一个数组,当所有延迟的 fileRead 都得到解析时,会记录“完成”。
$.when.apply(null, $.each(files, function(index, file){
return self.fileRead.read(file).done(function(fileB64){
self.fileShow(file, fileB64, fileTemplate);
});
})).done(function() {
console.log('done');
})
问题是,我只希望在 fileShow 方法返回后记录完成。
这个fileShow方法是不是也需要实现deferred.还是可以直接返回?
如何修改循环,以便在执行所有 fileShow 方法后运行 console.log('done')?
最佳答案
使用$.map
而不是$.each
。这会返回迭代函数返回的 Deferred
对象数组,然后可以将这些对象传递给 $.when
。
$.when.apply(null, $.map(function(index, file) {
return self.fileRead.read(file).done(function(fileB64) {
self.fileShow(file, fileB64, fileTemplate);
});
})).done(function() {
console.log('done');
});
关于javascript - 何时及延期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24307278/