Angularjs ui-router在路由中解析

时间:2017-06-21 17:28:47

标签: javascript angularjs angular-ui-router angular-promise resolve

你可以查看我的代码:

    .state('addNewGroup', {
    url: '/group/new',
    resolve:{
        "checkPermission": function ($state, checkPermission) {
            checkPermission.checkPermission()
                .then(function (result) {
                    if (result) {
                        alert('Hello');
                    } else {
                        alert('access denied');
                    }
                })
        },
        "otherStuff": function () {
            console.log("Should execute only if result in 'checkPremission' is true");
        }

    },
});

问题

我在路由配置中有两个承诺。 是否有可能只解决具体的承诺? 我的意思是,假设我有5个承诺要解决,我只想在“checkPremission”为真的情况下解决所有问题。在其他情况下,我不想解决所有问题。 是否可能或我应该使用不同的逻辑。

2 个答案:

答案 0 :(得分:0)

这里的主要问题是当你编写这样的代码时,我认为所有的函数(在键之后)是异步执行的。但正如我所看到的(如果是真的),你必须等待结果来决定下一步的动作。那么,为什么不把你的代码(可能是if-else)来决定在promise的成功和失败函数中调用的函数。

答案 1 :(得分:0)

您可以通过将下一个承诺作为依赖项注入来使下一个承诺等待前一个承诺:

resolve: {
  firstResolve: function() {
    return 'A result';
  },
  nextResolve: function(firstResolve) {
    // firstResolve has the value 'A result' here
  }
}

从技术上讲,第二个解析将会执行,但你可以根据第一个解析结果来建立逻辑。