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 Это не так просто. xrome.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