只是一个'愚蠢'的问题,但对于AngularJS的学生来说,这让我很困惑。
当console.logging变量时,假设var result
是来自GET或其他的承诺,.then()
我做了一些任务,比如asignin变量。
var result = ... ;
$scope.number = {};
result.then(function(data) {
$scope.number = 5;
console.log($scope.number);
});
console.log($scope.number);
好! 所以对我来说,这应该打印
5
5
(如果我初始化$ scope变量,在此函数或承诺之外)
5
undefined
(如果第二个.log尝试在函数外部打印一个未定义的全局变量)
所以我得到了:
undefined
5
为什么out $scope.number
在内部(5)变量之前打印?
我希望在获得GET
之后在promise中初始化变量,然后使用初始化的var。
谢谢=)这会加快我的学习速度!
答案 0 :(得分:0)
要理解的主要是以下内容立即返回承诺:
var result = ... ;
在此之后,您将函数传递给promise的.then
方法:
result.then(...)
在那之后你就做了:
console.log($scope.number);
然后 - 一旦异步操作(如HTTP请求)完成并且promise解析 - 传递给.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
});