javascript - AngularJS $q promise 成功回调以错误的顺序执行

标签 javascript angularjs promise deferred

我的以下代码有问题:

initPromise = $q.all(arrayOfPromises)
    .then(function () {
        return $scope.methodWhichReturnsPromise()
            .then(function (data) {
                console.log("report data");
                return data;
            });
    });

if ($scope.showCompare) {
    initPromise
        .then(function () {
            return $q.all(anotherArrayOfPromises);
        })
        .then(function () {
            return aMethodWhichReturnsAPromise().then(function () {
                console.log("compare report data");
            });
        });
}

initPromise
    .then(function () {
        console.log("generate view data");
    })
    .finally(function () {
        console.log("finally");
    });

根据路由参数加载 Controller 时,我正在加载一堆异步数据。如果存在 showCompare 标志,我想在两者之间加载一些内容。但 console.log 消息的顺序如下:

report data
generate view data
finally
compare report data

我期望比较报告数据会按照代码中编写的顺序完全显示。

我做错了什么?

最佳答案

您将在 initPromise 上添加两个不同的处理程序,而不是链接所有 .then() 调用。为此,您需要使用

if ($scope.showCompare) {
    initPromise = initPromise.then(…);
}

关于javascript - AngularJS $q promise 成功回调以错误的顺序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18704582/

相关文章:

javascript - 即使在使用 $apply 之后 Angular 也不会更新 View

java - Spring Hibernate MySQL - 没有连接?

javascript - 将对象绑定(bind)到 Promise.then() 参数的正确方法

javascript - 从 Angular 2 中 Chartist 的 API 获取数据

javascript - 如何使用 bootstrap 3 记住并保持事件的导航选项卡? (如果重要的话,Asp Mvc 5)

javascript - 如何在其中制作带有 HTML 表单的丰富工具提示

javascript - 如何更新 fullcalendar.js 中的开始时间(!)

javascript - 使用 Mongoose 中间件改变请求正文

javascript - Typescript Kendo UI 网格列类型错误

jquery - 如何等待 ajax 调用完成然后再进行下一个调用?