如何从angularjs的$q.defer() promise对象中删除回调?
how can I remove a callback from $q.defer() promise object of angularjs
Angularjs $q.defer()
promise对象接收notify回调,当我们给出多个时,它会保留并通知所有的回调,也就是说它不会覆盖旧的回调。
var def=$q.defer();
def.promise.then(null, null, callback1);
def.promise.then(null, null, callback2);
然后,如果我想删除(取消注册),例如,callback2
,我应该怎么做?
下面是一个实例:
jsfiddle
快速查看$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()
回调。
promise用于创建异步进程序列。一旦设置了这个序列的一个步骤,就不可能(至少以优雅的方式)取消它。
纠正我,如果我错了,但这就是你在这里要做的:你设置一个步骤与回调2,然后你试图删除该步骤。相反,我建议仅在满足特定条件时才设置callback2,例如:
var notifCallback;
if (true) {
notifCallback = function(notif) {
console.log('notify 1', notif);
};
} else {
notifCallback = function(notif) {
console.log('notify 2', notif);
};
}
def.promise.then(null, null, notifCallback);
相关文章:
- Promise没有;t返回对象的数组
- 将数据从promise then方法传递到对象方法
- jQuery Deferred and promise-错误:对象没有't支持属性或方法'然后'
- Angularjs$http删除$q promise导致TypeError:对象不是函数
- 如何测试从promise对象获取数据的控制器
- Angular promise回调不是在构造函数方法内部触发,而是在对象文本方法中触发
- 如何使用promise正确处理express.js中的错误(字符串或对象)
- Leadfoot会话对象返回promise
- 正在读取angular js promise中的NegotiatedContentResult对象(从WebAPI发送)
- 正在使用promise对象中止ngResource
- 如何从节点中的api promise返回对象
- 包含 promise 的对象数组在 for 循环中混乱
- 在 Promise 调用的错误函数回调后附加对象的用法是什么
- 对象文字(哈希)与 Promise.all
- 使用 Promise.map 返回一个与 bluebird “订购”的对象
- ngResource PUT 由于 JSON 对象中的$promise和$resolved而返回错误请求
- 在PouchDB/Barket.js中推送promise数组之前修改对象的值
- Promise对象带有导致错误的警报和返回值
- 如何让promise对象成功函数中的代码在调用后的代码之前执行
- defer.promise 不等待对象解析