Easy about Angular: 为什么要改变顺序?

Easy about Angular: Why does it change order?

只是一个 'silly' 问题,但对于 AngularJS 的学生来说,这让我很困惑。

当 console.logging 一个变量时,假设 var result 是来自 GET 或其他任何东西的承诺,并且 .then() 我做一些任务,比如分配一个变量。

    var result = ... ;

    $scope.number = {};


    result.then(function(data) {
        $scope.number = 5;

        console.log($scope.number);
    });


console.log($scope.number);

好的! 所以对我来说,这应该打印

5
5

(如果我在这个函数或 promise 之外初始化一个 $scope 变量)

5
undefined

(如果第二个 .log 试图在函数外打印一个未定义的全局变量)

所以我得到:

undefined
5

为什么外部 $scope.number 在内部 (5) 变量之前打印?

我想在获得 GET 后初始化变量,在承诺中,稍后使用初始化的变量。

谢谢 =) 这会加快我的学习速度!

主要要理解的是,下面returns一个promise马上就来了:

var result = ... ;

在那之后,您将一个函数传递给 promise 的 .then 方法:

result.then(...)

紧接着你做了:

console.log($scope.number);

然后 - 一旦异步操作(如 HTTP 请求)完成并且承诺解决 - 您传递给 .then 的函数最终执行:

function(data) {
    $scope.number = 5;

    console.log($scope.number);
}

因此存在可帮助您管理异步行为的承诺。当您必须管理多个异步函数时,它们才真正开始大放异彩:

asyncFunction1().then(function() {
    // This executes after asyncFunction1 completes
    return asyncFunction2();
}).then(function() {
    // This executes after asyncFunction2 completes
});