我有一个带有$q.notify(..)回调的控制器这是SocketService使用的。
SocketService.receive().then(null, null, function (data) {
console.log('Received data from service');
});我预计当控制器被销毁时,此回调将被删除。但这种行为是不同的。例如,如果我考虑到这个控制器,并将路由更改为不同的(控制器被销毁),然后在下一个SocketService $q.notify上返回(第二个初始化控制器),那么这个回调将被触发2次。
[Controller-1] init
[SocketService] Received event
[Controller-1] Received data from service
[Controller-1] $on $destroy
[Controller-2] init
[Controller-2] $on $destroy
[Controller-1] init
[SocketService] Received event
2x[Controller-1] Received data from serviceSocketService
var listener = $q.defer();
receive: function () {
return listener.promise;
},
socket.stomp.subscribe(TOPIC, function (data) {
console.log('[SocketService] Received event ');
listener.notify(JSON.parse(data.body));
});如何删除控制器销毁的侦听器回调?
发布于 2016-02-17 22:10:43
将onProgress函数附加到可以取消的本地defer()对象。
var localDefer = $q.defer();
SocketService.receive().then(null, null, function onProgress(data) {
localDefer.notify(data);
});
//use local promise
localDefer.promise.then(null, null, function onProgress(data) {
console.log('Received data from service');
});当范围被销毁时,拒绝(或解析)本地defer()对象以停止本地通知。
$scope.$on("$destroy", function() {
localDefer.reject("scope destroyed");
});一旦承诺被解决(要么履行要么被拒绝),对defer()方法(.resolve、.reject和.notify)的进一步调用将被忽略。
https://stackoverflow.com/questions/35467836
复制相似问题