2017-01-31 3 views
0

fileReader를 사용하여 serviceWorker 내부의 큰 파일을 읽으려고합니다. 난 그냥 간단한 예제를 설치하려면 먼저 무한 루프에 갇혀있어 그리고 왜 이해가 안 돼요. 여기 내 코드입니다 :내 fileReader가 Promise에서 무한대로 반복되는 이유는 무엇입니까?

.then(function(blob) { 
     console.log("Let's loop out of control"); 

     function compressAndIndexFile(my_blob) { 
      var file_reader = new FileReader(), 
      chunk_size = 1024, 
      offset = 0; 
      return new Promise(function (resolve, reject) { 
      file_reader.onload = function (my_event) { 
       // process 
       offset += chunk_size 
       if (offset > 2048) { 
       resolve("We're done"); 
       } 
       return loopOverBlob(offset); 
      }; 
      file_reader.onerror = function (my_event) { 
       reject(my_event); 
      }; 

      function loopOverBlob(my_offset) { 
       var slice; 
       console.log("LOOPIng") 
       console.log(my_offset) 
       slice = blob.slice(my_offset, my_offset += chunk_size); 
       return file_reader.readAsText(slice); 
      } 
      return loopOverBlob(offset); 
      });    
     } 
     return compressAndIndexFile(blob); 
     }) 

나는 2048 바이트 후 루프를 중지하려고 올바르게 2 반복 후 트리거와 약속을 해결합니다. 그러나 그 고리는 망각을 계속합니다.

질문 : 지금 내가 잘못 궁금 잠시 동안 위에 앉아있어
. 어쩌면 다른 누군가가 생각을 갖고있을 수도 있습니다. 감사!

+1

해결/거부 후 복귀가 필요합니다. – rickythefox

+1

'해결 '이 재귀를 중지하지 않습니다. –

+0

확인. 돌아 오는 것이 도움이되는지 봅시다. 하, 그렇지. 난 몰랐어. 감사. 대답해라. 내가 확인할 수 있니? – frequent

답변

1

시도 :

if (offset > 2048) { 
    resolve("We're done"); 
} else { 
    return loopOverBlob(offset); 
} 

내가 약속을 사용한 적이 있지만, 재귀 호출은 해상도가 발사 후에도마다 일어나고있는 것 같습니다.