javascript - 何时及延期

标签 javascript jquery each .when

我正在循环遍历一个数组,当所有延迟的 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 方法返回后记录完成。

  1. 这个fileShow方法是不是也需要实现deferred.还是可以直接返回?

  2. 如何修改循环,以便在执行所有 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/

相关文章:

Javascript - 调用外部函数作为对象的属性

jquery - 如何迭代数据源以创建 Querybuilder 过滤器

jQuery .each() 索引?

javascript - Highcharts 柱形图,数据来自 mongodb

javascript - Bootstrap 日历开始日期

javascript - 从 div 中的选定跨度/文本中删除样式

jquery - 编写此代码的更好方法? jQuery

javascript - Lodash & Underscore "each"over localStorage 给出了意想不到的结果

javascript - 将单击和双击视为相同

php - 使用 php 代理的跨域 Ajax GET 请求