我有一个返回承诺的函数。我为此创建了一个延迟的jQuery,可能会以自定义方式解析/拒绝,具体取决于实现。
一个实现使用AJAX调用,我想将重定向或队列将AJAX承诺的失败/解决方案重定向到之前创建的那个。这意味着每当AJAX调用具有解析/拒绝/进度时,延迟应该使用相同的参数触发其自己的解析/拒绝/进度。
这是一些虚拟示例代码。
function Test() {
}
Test.prototype.doSomething() {
this._deferred = $.Deferred();
this.doSomethingImpl();
return this._deferred;
}
var test = new Test();
test.doSomethingImpl = function() {
var ajax = $.post(...);
// resolve/reject/progress here the this._deferred based on the ajax promise
}
我知道我可以使用AJAX done
,fail
和progress
回调以冗长的方式执行此操作,并手动调用延迟的相应方法resolve
,{ {1}}或reject
),但如果有的话,我正在寻求一种单行班。
修改
这是一个与真实代码类似的代码,使用progress
。
knockoutjs
此代码是复杂数据网格视图模型类的片段,并且花哨的刷新解决方案用于确保刷新被限制。
答案 0 :(得分:1)
是的,可以重定向分辨率(在一个完美的世界 1 ,只有deferred.resolve(promise)
),但它完全没必要。当你已经在调用能够为你做出承诺的东西时,不要创建延期 - 避免使用deferred antipattern!你可以简单地return
承诺:
Test.prototype.doSomething = function() {
return this.doSomethingImpl();
};
var test = new Test();
test.doSomethingImpl = function() {
var ajax = $.post(...);
return ajax; // the promise
};
1)其中jQuery遵循Promises / A +规范,deferred.resolve
接受thenables