Подтвердить что ты не робот

Возможно ли reset состояние отложенного объекта jQuery?

Возможно ли reset разрешенный объект jQuery на "неразрешенное" состояние и начать его инициализацию и обратные вызовы снова?

Конкретная вещь, которую я делаю, это то, что у меня есть отложенная оболочка jQuery поверх локальной файловой системы api. Оттуда я создаю более высокий уровень отсрочки для вещей, которые меня волнуют:

var getFs = defFs.requestQuota(PERSISTENT, 1024*1024)
              .pipe (bytes) -> defFs.requestFs(PERSISTENT, bytes)

var getCacheContents = getFs.pipe (fileSystem) -> 
      defFs.getDirectory('Cache', fileSystem.root).pipe (dir) ->
          defFs.readEntries(dir)

В большинстве случаев, когда я вызываю getCacheContents, я не возражаю, чтобы возвращаемые memo -ized значения возвращались, на самом деле я предпочитаю это. Но по случаю, когда я хочу писать в кеш, мне действительно нужна возможность reset, чтобы этот канал и он повторно выбирал и повторно просматривал кеш при следующем доступе.

Я мог бы cobling что-то вместе из $.Callbacks, но решение на основе отсрочки действительно было бы идеальным.

4b9b3361

Ответ 1

Нет. A Promise определяется определение, которое разрешается только один раз - от unresolved до fulfilled ИЛИ до rejected. Вы не сможете сделать это с помощью jQuery Deferred s.

На самом деле вы ищете Сигналы. Их нужно уволить не один раз, но обеспечить аналогичный интерфейс. Есть несколько реализаций, вы можете вывести js-signals или wire.js.

Ответ 2

Единственное решение, которое я смог найти, - это reset объект $.Deferred и вернуть новое обещание из этого. Он работает вместе с некоторой внутренней грязной проверкой API (если что-то отредактировано/удалено), но будет более эффективным только для reset существующего $.Deferred и позволить ему повторно разрешать следующий запрос Promise.