gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:15:42 26 4
gpt4 key购买 nike

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() 回调。

关于javascript - 如何从 angularjs 的 $q.defer() promise 对象中删除回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31899260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com