Angularjs $q.defer()promise对象接收通知回调,当我们给出多个时,它会保留并通知所有这些,即它不会覆盖旧版本.
var def=$q.defer();
def.promise.then(null, null, callback1);
def.promise.then(null, null, callback2);
然后,如果我想删除(取消注册),例如,callback2,我该怎么办?
这是现场的例子:
最佳答案 快速浏览
source的$q向我们展示:
then: function(onFulfilled, onRejected, progressBack) {
var result = new Deferred();
this.$$state.pending = this.$$state.pending || [];
this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]);
if (this.$$state.status > 0) scheduleProcessQueue(this.$$state);
return result.promise;
}
因此,没有特定的标识符指向您在$$state.pending堆栈中的匿名回调以便将其拼接出来.
我以前没有亲自试过这个,但是如果你想擦除挂起的堆栈,可能是def.$$state.pending = [];会做的伎俩.然后你可以简单地重新分配你想要的def.then()回调.