【问题标题】:AngularJS $q promises success callback gets executed in the wrong orderAngularJS $q 承诺成功回调以错误的顺序执行
【发布时间】:2013-09-10 02:34:44
【问题描述】:

我对以下代码有疑问:

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 会完全按照它在代码中写入的顺序显示。

我做错了什么?

【问题讨论】:

    标签: javascript angularjs promise deferred


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!这是有道理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 2013-05-09
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多