Когда и отложено

#javascript #jquery #each #.when

#javascript #jquery #каждый #.когда

Вопрос:

Я перебираю массив, когда все отложенные чтения файлов разрешены, регистрируется «готово».

 $.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');

    })
 

Проблема в том, что я хочу, чтобы done регистрировался только после возврата метода fileShow.

  1. Должен ли этот метод fileShow также реализовывать отложенный. Или он может просто вернуться?
  2. Как я могу изменить цикл, чтобы console.log(‘done’) запускался после выполнения всех методов fileShow?

Комментарии:

1. Используйте $.map вместо $.each , чтобы вы могли возвращать Deferred объекты. $.each возвращает его первый аргумент.

Ответ №1:

Используйте $.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');

});
 

Комментарии:

1. Это не работает, он просто сразу регистрирует «готово»