2016-11-25 10 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'); 
} 
関連する問題