Javascript 在AngularUI路由器中,未解决的承诺泄漏吗?

Javascript 在AngularUI路由器中,未解决的承诺泄漏吗?,javascript,angularjs,memory-leaks,angular-ui,angular-ui-router,Javascript,Angularjs,Memory Leaks,Angular Ui,Angular Ui Router,我正在使用angular UI路由器,我想知道是否有人知道使用resolve时未解决的承诺是否会泄漏。我们的用例是,在某些状态下,我们需要进行一些检查,然后在加载原始状态之前转换到不同的url 我们处理这个问题的方法是在resolve中使用$location检查和切换url,并留下一个未解决的承诺。未解决的承诺用于防止加载原始状态的控制器和模板(否则它们会抛出错误) 所以我的问题是,这种留下未解决承诺的做法是否会导致泄漏?我意识到另一种选择是设置一个长的$timeout来解决承诺,但如果没有必要

我正在使用angular UI路由器,我想知道是否有人知道使用
resolve
时未解决的承诺是否会泄漏。我们的用例是,在某些状态下,我们需要进行一些检查,然后在加载原始状态之前转换到不同的url

我们处理这个问题的方法是在
resolve
中使用
$location
检查和切换url,并留下一个未解决的承诺。未解决的承诺用于防止加载原始状态的控制器和模板(否则它们会抛出错误)


所以我的问题是,这种留下未解决承诺的做法是否会导致泄漏?我意识到另一种选择是设置一个长的
$timeout
来解决承诺,但如果没有必要,我希望避免它。

您需要解决或拒绝承诺。我建议URL切换将在
$stateChangeError
事件侦听器中进行,该侦听器将因拒绝承诺而触发。您可以在
拒绝([data])
中将要转到的位置传递给侦听器

超时后将拒绝的某些承诺(模拟服务器调用)

这将处理拒绝

app.run(function ($rootScope, $state) {
    $rootScope.$on('$stateChangeError', function (e, to, toParams, from, fromParams, error) {
        if (error.type === 'redirect') {
            $state.transitionTo(error.location);
        }
    });
});
app.run(function ($rootScope, $state) {
    $rootScope.$on('$stateChangeError', function (e, to, toParams, from, fromParams, error) {
        if (error.type === 'redirect') {
            $state.transitionTo(error.location);
        }
    });
});