0

증가하는 키 "0", "1", "2"등으로 blob 객체를 chrome.storage.local에 저장합니다. 객체의 양은 고정되어 있지 않습니다. "0"부터 반복적으로 읽고 처리하는 가장 좋은 방법은 무엇입니까? (나는 이전 객체가 처리되지 않을 때까지 다음 객체를 읽을 수 없다). 이 BLOB 파일을 많이 할 수 있고 내가 한 번에 메모리에 처리하지 않으려는반복적으로 chrome.storage의 객체를 읽고 처리합니다.

chrome.storage.local.get(null, function(items) { 
    //handle items 
}); 

하지만 내 경우 :

는 나는이 코드 모든 개체를 얻을 수 있다고 알고 .

+0

그래서 반복하여 읽으시겠습니까? – epascarello

+0

@epascarello 너무 간단하지 않습니다. chrome.storage API는 비동기식이며 처리 시간이 무작위 일 수 있습니다 (특정 순서로 네트워크를 통해 이러한 BLOB 객체를 보내야 함). 따라서 작업 순서는 READ 0 -> PROCESS 0 -> READ 1 -> PROCESS 1 -> 등이되어야합니다. –

+0

완료되면 하나의 항목을 꺼냅니다. 두 번째 항목을 꺼내고 항목을 찾을 때까지 반복합니다. – epascarello

답변

1

그래서 간단한 루프 만 수행하면 완료되면 넷 항목이로드됩니다. 시스템의 단순 대기열 유형.

(function() { 

    var ind = 0; 
    function getNextItem() { 
     var data = chrome.storage.local.get("key" + ind, processItem); 
     ind++; 
    } 

    function processItems(items) { 

     if(!items) return; 

     //do stuff here when done call next 

     getNextItem(); // call this whenever your processing is done 

    } 

    getNextItem(); 

}()); 
+0

좋아 보인다! 이 방법을 생각해 봤지만 재귀 호출 때문에 "호출 스택 크기가 초과되었습니다"예외가 발생합니다. 필자의 경우 수만개의 BLOB 파일을 가질 수 있으며 http://www.2ality.com/2014/04/call-stack-size.html이 너무 많을 수 있습니다. 재귀없이이 작업을 해결할 수 있습니까? –

+0

예외가 발생하지 않을 것이라고 생각합니다. 사건을 처리하는 유일한 방법은 다음 단계를 수행하기 위해 프로세스가 완료되면 이벤트를 실행하는 재귀입니다. – epascarello