AngularJS$q承诺成功的回调以错误的顺序执行

AngularJS $q promises success callback gets executed in the wrong order

本文关键字:错误 顺序 执行 回调 AngularJS 承诺 成功      更新时间:2023-09-26

我对以下代码有问题:

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");
    });

根据路由参数加载控制器时,我正在加载一堆异步数据。如果旗帜showCompare在那里,我想在两者之间加载一些东西。但console.log消息的顺序如下:

report data
generate view data
finally
compare report data

我期望compare report data会以与代码中编写的顺序完全相同的顺序显示。

我做错了什么?

您将在

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

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