[英]Troubles using promise with AngularJS
我目前正在開發基於node.js的應用程序,服務器端似乎運行正常,但與公共端的日子很艱難。
我試圖使用與控制器 AngularJS的承諾 。 這是我的代碼:
var userId;
var userEmail = "somethingICanRecognizeInCaseItDoesntChange";
function getUserInfos(){
var deferred = $q.defer();
if(SessionStorageService.get('token')){
Auth.isAlive().success(function(user){
$scope.user = user;
console.log("user :", user);
console.log("user email :", user.email);
deferred.resolve(user.email);
});
}
else {
$scope.user = {};
deferred.resolve([]);
}
return deferred.promise;
}
userEmail = getUserInfos();
console.log("result :", userEmail);
我認為控制台中的result
將與user email
相同,但事實並非如此。 這是控制台日志:
result : Object { $$state: Object }
user : Object { firstName: "super", lastName: "admin", email: "a", isSuperAdmin: true, _ts: "2016-05-03T11:17:06.943Z" } website-ranking.js:41:21
user email : a
問題是,無論我嘗試,我從來沒有a
作為結果。 我嘗試了諸如getUserInfos().$$state
, getUserInfos().$$state.value
, getUserInfos().$$state.Object
, getUserInfos().Object
, getUserInfos().Object.value
,但這些都getUserInfos().Object.value
。
我在這里想念什么? 我是否以錯誤的方式使用了諾言? 我忘記了什么嗎?
請不要猶豫告訴我是否可以改進此問題,我很樂意添加代碼,或者您可能需要幫助我解決問題的任何信息。
編輯:事實是,我已經在其他地方使用了大多數代碼,只是因為我添加了保證,我有點迷路了。 例如,在這里,我使用Auth.isAlive()沒有任何問題:
function getUserInfos(cb){
if(SessionStorageService.get('token')){
Auth.isAlive().success(function(user){
$scope.user = user;
cb();
});
}
else {
$scope.user = {};
cb();
}
}
$ scope.user已修改,可以在應用程序中進一步使用,沒有問題。
由於該問題被標記為可能重復,因此我想進一步解釋一下:我知道我為什么要使用諾言,而且我認為我了解javascript中async的不同問題。 這是我的問題,盡管我過去已經成功使用了Promise,但我的代碼卻無法正常工作,我也不明白為什么。 我不是在問如何從異步調用中獲取響應,而是可以幫助我理解編寫代碼時哪里出錯了。 如果您仍然認為這是重復項,請在評論中讓我知道,然后我將進行處理,可能是我錯過了所提供鏈接中的某些內容。
由於您的方法getUserInfos()返回了一個Promise,因此您可以執行以下操作:
var userId;
var userEmail = "somethingICanRecognizeInCaseItDoesntChange";
function getUserInfos(){
var deferred = $q.defer();
if(SessionStorageService.get('token')){
Auth.isAlive().success(function(user){
$scope.user = user;
console.log("user :", user);
console.log("user email :", user.email);
deferred.resolve(user.email);
});
}
else {
$scope.user = {};
deferred.resolve([]);
}
return deferred.promise;
}
getUserInfos().then(function(_email){
userEmail = _email;
console.log("result :", userEmail);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.