wli*_*gke 3 javascript memory-leaks angularjs angular-ui angular-ui-router
我正在使用角度UI路由器,我想知道是否有人知道在使用时是否未解决的承诺resolve
会泄漏.我们的用例是,在某些状态下,我们需要进行一些检查,然后在原始状态加载之前转换到不同的URL.
我们处理这个的方式是进行检查并使用$location
内部切换url resolve
并留下未解决的承诺.未解决的承诺用于防止原始状态的控制器和模板加载(否则它们会抛出错误).
所以我的问题是,这种留下未解决的承诺的做法会导致泄漏吗?我意识到另一种选择是$timeout
为解决承诺设定一个长期,但如果没有必要,我想避免它.
您需要解决或拒绝承诺.我建议URL切换将发生在$stateChangeError
事件监听器中,这将通过拒绝承诺来触发.您可以将要转到的位置传递reject([data])
给侦听器.
http://fiddle.jshell.net/L9jxf/2/
一些承诺将在超时后拒绝(模拟服务器调用)
protected: ['$timeout', '$q', function ($timeout, $q) {
var deferred = $q.defer();
$timeout(function () {
deferred.reject({type:'redirect',location:'401'});
}, 1000);
return deferred.promise;
}]
Run Code Online (Sandbox Code Playgroud)
这可以处理拒绝
app.run(function ($rootScope, $state) {
$rootScope.$on('$stateChangeError', function (e, to, toParams, from, fromParams, error) {
if (error.type === 'redirect') {
$state.transitionTo(error.location);
}
});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
997 次 |
最近记录: |