0

blobオブジェクトをchrome.storage.localのキー "0"、 "1"、 "2"などに格納します。オブジェクトの量は固定されていません。 "0"から反復して読み込み、処理する最善の方法は何ですか? (前のオブジェクトが処理されない限り、次のオブジェクトを読み取ることはできません)。chrome.storageからオブジェクトを繰り返し読み込んで処理する

私はそれがこのコードですべてのオブジェクトを取得することは可能だということを知っている:

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

しかし、私の場合はそこBLOBファイルの多くすることができ、私はすべてを一度メモリにそれらを処理する必要はありません。

+0

ループオーバーして読んでください。 – epascarello

+0

@epascarelloそれほど単純ではありません。 chrome.storage APIは非同期で、処理時間はランダムになる可能性があります(これらのBLOBオブジェクトを特定の順序でネットワーク経由で送信する必要があります)。したがって、アクションのシーケンスはREAD 0→PROCESS 0→READ 1→PROCESS 1→etc. –

+0

にする必要があります。 2番目のアイテムを取り出し、アイテムが見つからなくなるまで繰り返します。 – 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

いいね!私はこのアプローチについて考えてきましたが、再帰呼び出しのために "呼び出しスタックのサイズが超過しました"ということを恐れています。私の場合は、何万個ものブロブファイルを持つことができ、それはあまりにも多すぎる可能性があります。http://www.2ality.com/2014/04/call-stack-size.html再帰なしでこのタスクを解決することは可能ですか? –

+0

例外が発生しないと感じています。あなたのケースを処理する唯一の本当の方法は、次のステップを実行するためにプロセスが完了したときにイベントを発生させるための再帰です。 – epascarello

関連する問題