如何解决 $q 的承诺?
how to resolve a $q for promise?
我正在使用 AngularJS 和 $q 作为 promise,我对用法感到困惑,我该如何修复这个 promise?
我想在调用 isLoggedInPromise() 或 "AUTH_REQUIRED" 时 return 用户。
谢谢!
function isLoggedInPromise() {
$q.when(userWithAllData()).then(function(user) {
return user;
});
$q.when(userWithAllData()).reject(function() {
return "AUTH_REQUIRED";
});
}
function userWithAllData(){
var deferral = $q.defer();
var query = new Parse.Query(Parse.User);
query.include(["info", "info.rank", "privateInfo"]);
query.get(Parse.User.current().id).then(function (loadedUser){
deferral.resolve( loadedUser );
});
return deferral.promise;
}
您要做的是在函数具有实际需要的所有数据时调用 promise 上的 resolve 函数 return
在 return 承诺的函数中,将 "resolve" 视为实际的 return 语句。
所以您的 isLoggedInPromise 函数也需要 return 一个承诺,这会使其变得多余。任何需要用户的东西都必须等待。
isLoggedInPromise().then(function(result){...etc...}, function(reason){//auth needed})
如果您仍然需要 isLoggedin 函数,那么它应该看起来像
function isLoggedInPromise() {
var isLoggedIn = userWithAllData().then(
function(user) {
return user;
},
function(reason){
return $q.reject("AUTH_REQUIRED")
});
}
当然,您还必须在 userWithAllData 函数中包含一些拒绝逻辑。
我正在使用 AngularJS 和 $q 作为 promise,我对用法感到困惑,我该如何修复这个 promise?
我想在调用 isLoggedInPromise() 或 "AUTH_REQUIRED" 时 return 用户。
谢谢!
function isLoggedInPromise() {
$q.when(userWithAllData()).then(function(user) {
return user;
});
$q.when(userWithAllData()).reject(function() {
return "AUTH_REQUIRED";
});
}
function userWithAllData(){
var deferral = $q.defer();
var query = new Parse.Query(Parse.User);
query.include(["info", "info.rank", "privateInfo"]);
query.get(Parse.User.current().id).then(function (loadedUser){
deferral.resolve( loadedUser );
});
return deferral.promise;
}
您要做的是在函数具有实际需要的所有数据时调用 promise 上的 resolve 函数 return
在 return 承诺的函数中,将 "resolve" 视为实际的 return 语句。
所以您的 isLoggedInPromise 函数也需要 return 一个承诺,这会使其变得多余。任何需要用户的东西都必须等待。
isLoggedInPromise().then(function(result){...etc...}, function(reason){//auth needed})
如果您仍然需要 isLoggedin 函数,那么它应该看起来像
function isLoggedInPromise() {
var isLoggedIn = userWithAllData().then(
function(user) {
return user;
},
function(reason){
return $q.reject("AUTH_REQUIRED")
});
}
当然,您还必须在 userWithAllData 函数中包含一些拒绝逻辑。