【发布时间】:2019-11-25 13:51:18
【问题描述】:
我在我的应用中有一系列承诺作为函数。我的每个服务函数都返回一个deferred.promise;
考虑到以下场景,主要 getUser 服务异步调用 getUserPreferences 和 getUserFavourites,解决 getUserData 后的 console.log 甚至在 getUserFavourites 响应之前就被解析! getUserFavourites 响应后,不应该解决 getUserData 中的承诺吗?
事实上,在调用 getUserFavourites 之前,console.log 中的“获取所有用户数据”就在控制台中。从字面上看,在 getUser 几乎像getUserData().then( 一样响应之后,只解决了顶级承诺并使底层 2 异步...
我在这里做错了什么?
var user = 'blabla';
function getUserData() {
var deferred = $q.defer();
getUser(user).then(
function(response) {
getUserPreferences(response.user).then(
function(preferences) {
console.log('preferences', preferences);
},
function() {
deferred.reject();
}
);
getUserFavourites(response.user).then(
function(favourites) {
deferred.resolve();
console.log('favourites', favourites);
},
function() {
deferred.reject();
}
);
},
function() {
deferred.reject();
}
);
return deferred.promise;
}
getUserData().then(
function() {
console.log('got all user data');
}
);
【问题讨论】:
-
听起来不太可能......是您的 console.log 在您的 deferred.resolve();问题?如果你交换它们,它会达到你的预期吗?
-
@MathewBerg,不,这不是问题。
标签: javascript angularjs promise