我有很多像这样的代码:
app.directive(... function(...) { return function($scope...) {
// add utilties like safeApply, handleError etc.
decorateScope($scope);
/**
* Starts some-XXXX request that will run in the background for a while
*/
$scope.doSomething = function() {
someService.doSomethingThatTakesAWhile(...)
.then(function(result) {
// success!
$scope... // DANGER!
})
.finally(function(result) {
$scope.$apply(); // DANGER!
})
.catch($scope.handleError.bind($scope)); // DANGER!
};
};});
标有DANGER!
的三行有一个可怕的谬误:当服务完成所请求的操作时,$scope
可能已被销毁(例如因为它是页面的一部分而不是再次激活;我的页面系统使用ng-if
等),对被破坏的$scope
进行操作肯定不是一个好主意。
这种混乱中是否存在一种角色?