2016-10-03 4 views
0

У меня есть ситуации, когда я итерация каталог файлов в Firefox с чем-то вроде следующего:OS.File.DirectoryIterator тайм-аут в Firefox Addon

let iterator = OS.File.DirectoryIterator(dir); 
let itPromise = iterator.forEach(entry){ 
return OS.File.read(entry.path).then(array => { 
return anotherPromise(array).then (
. 
. 
. 
} 
}); 

return itPromise.then(function() { 
//DO stuff after iterator is completely done 
}); 

Похоже, что этот итератор обещание иногда раз, и никогда не попадает в // Делать материал после строки итератора. Если я делаю это для небольшого количества файлов, он, похоже, работает нормально - но если мой итератор, кажется, занимает больше, чем сказать, минуту (или неизвестный магический номер), обещание никогда не вернется. Является ли firefox делать что-то, чтобы закрыть мой OS.File-итератор?

Я прочитал в сообщении об ошибке здесь: https://bugzilla.mozilla.org/show_bug.cgi?id=1279389

, что есть предпочтение osfile.reset_worker_delay, но я, кажется, не быть в состоянии найти, что в Firefox 47, или любой из версий разработчиков я скачал ,

Это то, что вызывает мою проблему - итератор занимает слишком много времени, и, таким образом, firefox не перейдет к следующей части?

ответ

0

Я являюсь автором DirectoryIterator.

  1. Как правило, единственный случай, когда когда-либо случится что-то вроде тайм-аута, - это если ваш код выполняется во время выключения. Это так?

  2. Предпочтение osfile.reset_worker_delay доступно только на ночном или Developer Edition. Да, вполне возможно, что есть ошибка с этим pref. Если бы вы могли предоставить минимальный образец, который мы могли бы воспроизвести, это было бы очень полезно. Чтобы проверить на вашей стороне, вы можете увидеть, что произойдет, если вы установите значение на очень большое число (скажем 1000000).

+0

Ive должен был создать обход и перестроить мой код. Если у меня появится шанс, я могу проверить, могу ли я сделать минимальный тестовый пример, но это может быть немного. – Derek