是否有可能解决一个jQuery对象重置为“未解决”状态,并揭开序幕,它的初始化和一遍回调?
我在做具体的事情是,我没有对本地文件系统的API一个jQuery推迟包装。 从那里,我建立了我关心的事情较高水平deferreds:
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我不介意被返回的备忘录,美化版值,其实我更喜欢它。 但是,之际,当我想写信给我真的想重置该管道的能力,缓存,并让它重新选择和访问在下一次重新扫描缓存。
我可以从$ .Callbacks凑齐的东西,但一个递延式的解决方案真的会是理想的。
第一个Promise
是通过定义解析只有一次的事情-从unresolved
,以fulfilled
或rejected
。 您将无法使用jQuery的做到这一点Deferred
秒。
您实际搜索的信号 。 他们是被解雇不止一次,而是提供一个类似的界面。 有一些实现了,那可能ceck了js-signals
或wire.js
。
我能找到的唯一的解决办法是重置$.Deferred
对象,并从一个新的回报承诺。 它与一些内部API脏检查(如果有些东西被编辑/删除)一起工作,但会更高性能的只是重置现有$.Deferred
,让它重新决心在下一个承诺要求。
可能的解决方案的一个例子是:
$.myDeferredList = [];
$.createRestorableDeferred = function(a,b) {
// JUST BY SIMPLE $.when().then();
$.myDeferredList[a] = {
deferred: $.Deferred()
, then: b
,restore : function() {
$.myDeferredList['myReady'].deferred = $.Deferred();
$.when($.myDeferredList['myReady'].deferred).then($.myDeferredList['myReady'].then);
}
,resolve : function() {
$.myDeferredList['myReady'].deferred.resolve();
}
}
$.when($.myDeferredList['myReady'].deferred).then($.myDeferredList['myReady'].then);
window[a] = $.myDeferredList['myReady'];
}
var counter = 0;
$.createRestorableDeferred('myReady', function () {
console.log('>> myReady WHEN called',++counter);
$.myDeferredList['myReady'].restore();
});
// RESOLVING ways
$.myDeferredList['myReady'].deferred.resolve();
$.myDeferredList.myReady.deferred.resolve();
myReady.resolve();
结果在控制台:
>> myReady WHEN called 1
>> myReady WHEN called 2
>> myReady WHEN called 3