Angular是否有预定义的对象来容纳所有当前的承诺?

时间:2015-08-19 20:50:55

标签: javascript angularjs angular-promise

我有一个控制器,我可以允许除一个函数之外的所有东西(让我们称之为itOneFunction())以异步方式运行。原因是,OneFunction()依赖大约10个promises来解决,否则它不需要执行它所需的范围内的数据。

我在网上看到过多个关于如何具体获取个人获取/查询/服务承诺的例子,但我没有看到的是一种检查所有承诺一下子被解决的方法 - 也许是凭借一个Angular我不知道的状态变量?类似的东西:

var currentPromises = $state.promises;
currentPromises.then(thatOneFunction());

或者如果还没有内置变量,那么有一种方法可以动态生成当前时刻未完成的所有承诺列表,然后我可以使用.then()?它会有很大帮助,因为我在这个应用程序中有很多具有这种结构的页面。

我尝试/目前正在做什么“ 截至目前我有一个解决方案,但它需要一些硬编码,我宁愿不继续。它基于插入对函数的调用,该函数检查计数器已调用该函数的次数,将其与已经调用该函数的promises数量进行比较(在计算控制器中的promises之后进行硬编码)以及是否已经完成所有必需的承诺,然后调用thatOneFunction()。

感谢您提供任何帮助/指示。

我的代码的示例位(实名/变量已更改):

控制器

$scope.runAfterAllPromises = function() {
               *code dependedent on all promises here*
}

MySvc.loadList(function (results) {
        $scope.myList = results;
    });


$scope.runAfterAllPromises();

服务

app.service("MySvc", ['$resource', function ($resource) {


    this.loadList = function (callBackFunction) {
        var stateRes = $resource('/api/ListApi');
        stateRes.query(function (ListResults) {
            if (callBackFunction && typeof (callBackFunction) === 'function') {
                callBackFunction(ListResults)
            };
        })

2 个答案:

答案 0 :(得分:2)

如果有帮助,你可以链接承诺吗?

这样的事情:

var promises = [];
promises.push(yourPromise1());
promises.push(yourPromise2());
promises.push(yourPromise3());
$q.all(promises).then(function(){ ...});

这是什么意思?

答案 1 :(得分:0)

简短回答:不,不存在这样的对象。

现在,如何实现您想要实现的目标:

var allPromise = $q.all([promise1, promise2, promiseN]);
allPromise.then(success).catch(error);

编辑:在你的“一个人可以梦想评论”后,我想补充一点:

您可以覆盖$ q.defer函数,并跟踪创建的所有延迟对象,并获得它们的承诺。

显然,这可能会产生一些延迟创建的问题,但从未解决过,但这可能是实现所需功能的最简单方法。如果你想要全力以赴,你可以看看角度装饰器,它提供了扩展角度提供者的功能框架