簡體   English   中英

麻煩在AngularJS中使用promise

[英]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

這是我在瀏覽器控制台中單擊“ Object得到的屏幕截圖: 安慰

問題是,無論我嘗試,我從來沒有a作為結果。 我嘗試了諸如getUserInfos().$$stategetUserInfos().$$state.valuegetUserInfos().$$state.ObjectgetUserInfos().ObjectgetUserInfos().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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM