我有一个似乎无法破解的简单问题。
当我调用下一个函数时,似乎未分配 $ rootScope 中的变量,但这不是Promise(.then)的意义吗?
我的堆栈是AngularJS v1.6.4和NodeJS,但这是一个纯粹的Angular问题
我的代码段位于 console.log 及其响应所在的位置。
mainApp.controller('navBarController', ['$scope', '$rootScope', '$http', function($scope, $rootScope, $http){
var checkIfAuthenticated = function(){
return $http.get('/api/isAuthenticated');
};
var getProfileID = function(){
return $http.get('/session');
};
var getUser = function(profileID){
console.log('This is the profileID when passed into getUser: ' + profileID); //this shows undefined
return $http.get('/api/user', {params: {_id: profileID}})
};
checkIfAuthenticated()
.then(function(res) {
if(res.status==200){
$rootScope.userLoggedIn = true;
};
})
getProfileID()
.then(function(res) {
if($rootScope.userLoggedIn === true){
$rootScope.profileID = res.data._id;
console.log('This is the profileID when getProfileID is called: ' + $rootScope.profileID); //this shows the correct ID
};
})
getUser($rootScope.profileID)
.then(function(res) {
if($rootScope.userLoggedIn === true){
$rootScope.profilePic = res.data.user.profilePic;
};
});
}]);
如果任何人都可以解释正在发生的事情,将不胜感激。
谢谢
答案 0 :(得分:1)
要将数据从一个承诺传递到另一个承诺,请将它们链接起来:
checkIfAuthenticated()
.then(function(res) {
if(res.status==200){
$rootScope.userLoggedIn = true;
return getProfileID();
} else {
throw "Not Logged In";
}
}).then(function(res) {
$rootScope.profileID = res.data._id;
console.log('This is the profileID when getProfileID is called: '
+ $rootScope.profileID); //this shows the correct ID
return getUser($rootScope.profileID);
}).then(function(res) {
if($rootScope.userLoggedIn === true){
$rootScope.profilePic = res.data.user.profilePic;
};
});
由于调用promise的.then
方法会返回新的派生promise,因此很容易创建promise的promise。可以创建任意长度的链,并且由于一个承诺可以用另一个承诺来解决(这将进一步推迟其解决方案),因此可以在链中的任何点处暂停/推迟对这些承诺的解决。
有关更多信息,请参见