2016-11-25 54 views
2

我被困在爲什麼我的承諾沒有工作。從我看過的其他文章中,我認爲我做得正確。下面是代碼我目前:角度「無法讀取屬性」,然後「未定義」,承諾

廠代碼

factory.isLoggedIn = function() { 
    $http.get('/api/v1/fitbit/auth') 
     .success((data) => { 
      return data.status; 
     }) 
     .error((error) => { 
      console.log('Error: ' + error); 
     }); 
} 

控制器代碼

$scope.fitbitAuth = function() { 
     FitbitFactory.isLoggedIn() 
      .then(
       function(data) { 
        $scope.fitbitStatus = data; 
       }, 
       function(errorData) { 
        console.log(errorData); 
       }); 
     return $scope.fitbitStatus; 
    }; 

從我的諾言,在return $scope.fitbitStatus應該填充$scope.fitbitAuth的理解,但它不是。我也在工廠返回了一個布爾值,它應該填充爲$scope.fitbitStatus

+0

在factory.isLoggedIn – vijay

+0

的$ http之前添加return語句並擺脫工廠中的成功和錯誤。 – fubbe

回答

2

你必須return東西(的承諾),或者是undefined

工廠代碼:

factory.isLoggedIn = function() { 
    return $http.get('/api/v1/fitbit/auth'); 
} 

控制器代碼:

$scope.fitbitAuth = function() { 
    return FitbitFactory.isLoggedIn() 
     .then(
      function(data) { 
       $scope.fitbitStatus = data; 
      }, 
      function(errorData) { 
       console.log(errorData); 
      }); 

}; 

在工廠圓滿成功/錯誤塊是沒有必要的,應予刪除。我也不確定你爲什麼return $scope.fitbitStatus;,因爲它是在返回時未定義的。

編輯:編輯答案,實際返回承諾。

+0

我返回了'$ scope.fitbitStatus',因爲我看到的其他一些論壇建議返回該承諾。我可能,也可能是,錯誤地認爲我是如何實現它的。 – 2b2a

+0

你沒有回覆承諾,但在你回來的時候沒有定義。我編輯了答案。 @ 2b2a – baao

+0

@ 2b2a查看我在哪裏移動了控制器代碼中的返回值。現在這個承諾被退回。您返回的時間將不確定 – baao

1

目前您還沒有從isLoggedIn工廠方法返回任何東西,您打電話給.then方法。

爲了使它的工作回報$http承諾object from service method. In your case you could simply return $ http.get method call which return promise object itself and then you can easily chain them up by calling FitbitFactory.isLoggedIn()。then`

factory.isLoggedIn = function() { 
    return $http.get('/api/v1/fitbit/auth'); 
} 
相關問題