Возможно ли 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, но решение на основе отсрочки действительно было бы идеальным.
Ответы
Ответ 1
Нет. A Promise
определяется определение, которое разрешается только один раз - от unresolved
до fulfilled
ИЛИ до rejected
. Вы не сможете сделать это с помощью jQuery Deferred
s.
На самом деле вы ищете Сигналы. Их нужно уволить не один раз, но обеспечить аналогичный интерфейс. Есть несколько реализаций, вы можете вывести js-signals
или wire.js
.
Ответ 2
Единственное решение, которое я смог найти, - это reset объект $.Deferred
и вернуть новое обещание из этого. Он работает вместе с некоторой внутренней грязной проверкой API (если что-то отредактировано/удалено), но будет более эффективным только для reset существующего $.Deferred
и позволить ему повторно разрешать следующий запрос Promise.