Angular是否有一个预定义的对象来存放所有当前的承诺?

Does Angular have a predefined object that houses all current promises?

本文关键字:承诺 有一个 是否 预定义 对象 Angular      更新时间:2023-09-26

我有一个控制器,我可以允许一切除了一个函数(让我们称之为thatOneFunction())异步运行。这样做的原因是,onefunction()依赖于大约10个已经解决的承诺,否则它在需要执行的范围内没有数据。

我已经在网上看到了多个例子,告诉你如何具体地抓住单个get/queries/services的承诺,但我还没有看到一种方法来检查所有的承诺一次都被解决了——也许是借助于一个我不知道的Angular状态变量?比如:

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

或者如果不是内置变量,是否有一种方法可以动态生成当前所有未完成的承诺列表,然后我可以使用。then()?这将非常有帮助,因为在这个应用程序中,我将有许多具有这种结构的页面。

我已经尝试过/正在做什么"到目前为止,我有一个工作,但它需要一些硬编码,我宁愿不继续。它是基于插入一个函数调用,检查该函数被调用了多少次的计数器,将其与应该调用该函数的承诺次数进行比较(在计算控制器中的承诺后硬编码),如果它已经完成了所有必需的承诺,则调用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)
            };
        })

你可以链式承诺,如果有帮助的话?

所以像这样:

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

你是这个意思吗?

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

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

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

编辑:在你的"一个男人可以梦想的评论"之后,我想加上这个:

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

显然,这可能会有一些延迟创建的问题,但永远不会解决,但可能是实现所需功能的最简单方法。如果你想从头开始,你可以看看angular装饰器,它为扩展angular提供商提供了一个功能框架

相关文章: