2014-06-19 1 views
2

배열을 통해 루핑 할 때 지연된 모든 fileRead가 해결되면 'done'이 기록됩니다.When and Deferred

$.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 메서드는 또한 지연을 구현해야합니까? 아니면 그냥 돌아올 수 있습니까?

  2. 어떻게하면 모든 fileShow 메소드가 실행 된 후에 console.log ('done')가 실행되도록 루프를 수정할 수 있습니까?

+1

'$ .each' 대신'$ .map'을 사용하면'Deferred' 객체를 반환 할 수 있습니다. '$ .each'는 첫번째 인자를 반환합니다. – Barmar

+0

@Barmar example? – user3729576

답변

0

$.each 대신 $.map을 사용하십시오. 이 함수는 반복 함수에 의해 반환 된 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'); 

}); 
+0

이것은 작동하지 않으며, 단지 'done'을 바로 기록합니다. – user3729576