#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.
- Должен ли этот метод fileShow также реализовывать отложенный. Или он может просто вернуться?
- Как я могу изменить цикл, чтобы 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. Это не работает, он просто сразу регистрирует «готово»