2014-06-19 74 views
2

我正在循環訪問一個數組,當所有延遲的fileRead被解析時,'done'被記錄下來。什麼時候和延期

$.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

使用'$ .map'而不是'$ .each',這樣你就可以返回'Deferred'對象。 '$ .each'返回它的第一個參數。 – Barmar

+0

@Barmar例子? – user3729576

回答

0

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

}); 
+0

這不起作用,它只是馬上記錄'完成' – user3729576

相關問題