Это все в «волшебном» синтаксисе вызова метода:
object.property();
Когда вы получаете свойство из объекта и вызываете его за один раз, объект будет контекстом для метода , Если вы вызываете тот же метод, но в отдельных шагах, контекст представляет собой глобальную область (окно):
var f = object.property;
f();
Когда вы получаете ссылку на метод, он больше не привязан к объекту, это просто ссылка на простую функцию. То же самое происходит, когда вы получаете ссылку на использование в качестве обратного вызова:
this.saveNextLevelData(this.setAll);
Здесь вы привязываете контекст к функции:
this.saveNextLevelData(this.setAll.bind(this));
Если вы используете jQuery вы должны использовать метод $.proxy
, а bind
не поддерживается во всех браузерах:
this.saveNextLevelData($.proxy(this.setAll, this));
Я ничего не могу сказать о лотке, я незнаком с ним.
Вы можете сделать одну из двух вещей.
Во-первых, вы можете скопировать файлы в в каталог, используя один тип имени (например, newfile.copying), а затем переименуйте их только в «новый файл» после завершения копирования. Затем во время сканирования вы просто игнорируете файлы «* .copying».
Вы можете отслеживать размеры файлов по мере их загрузки и если размер файла не изменился через некоторое время (несколько секунд ), то вы можете предположить, что файл выполнен с копированием и началом обработки.
Наконец, вы должны просто иметь «сделанную» директорию (на том же диске) и переименовывать файлы в этот каталог,
Другой вариант заключается в том, что у вас может быть три каталога: «входящий», «рабочий», «сделанный».
Файлы копируются в «входящие» ". Прежде чем вы начнете их обрабатывать, вы переименуете их в «рабочий» каталог. Наконец, вы затем перемещаете его оттуда в каталог «done».
Это дает вам возможность восстановления, если система будет прервана. Вы «знаете», что последний обработанный файл, и вы можете либо его переработать, либо как угодно.
Параметры переименования важны, потому что в той же файловой системе они являются атомарными. У вас никогда не будет файла в одном каталоге, а не в другом, или в одном имени и в другом.
Если вы используете Java 7+, используйте Java java.nio.file.WatchService
. Это лучший результат, потому что он работает везде, ожидаемый (за исключением одной ошибки в Linux) и не полагается на дополнительные библиотеки.