javascript – 如何从angularjs的$q.defer()promise对象中删除回调

Angularjs $q.defer()promise对象接收通知回调,当我们给出多个时,它会保留并通知所有这些,即它不会覆盖旧版本.

var def=$q.defer();
def.promise.then(null, null, callback1);
def.promise.then(null, null, callback2);

然后,如果我想删除(取消注册),例如,callback2,我该怎么办?

这是现场的例子:

jsfiddle

最佳答案 快速浏览
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()回调.

点赞