getstream API を angular サービス (factory) にラップしようとしています。
これが私のコードです:
.factory('FeedStream', function($http, $q) {
var client = stream.connect('xxxxxxxxxxx');
return {
feed : function() {
$http.get('/api/feed/auth/')
.success(function(auth) {
var user_feed = client.feed('user', auth.user, auth.token);
console.log(user_feed.get());
user_feed.get().then(function(data) {
console.log(data);
return data;
})
})
},
}
まず、エンドポイント /api/feed/auth/ を使用して、サーバーから user_id と認証トークンを取得します。このデータは、Angular promise で返されます。
次に、このデータを使用して getstream API を呼び出し、user_feed
オブジェクトを取得します。このオブジェクト ( user_feed
) を返すと、コントローラーで未定義になります。ここでサービスのコンソールに出力すると、正しい値が表示されます。復帰後 0.5 秒ほどで印刷が行われることに気付きました。この変数の割り当てが非同期で行われるのはなぜですか?
get
console.log ステートメント内でこのオブジェクトのメソッドを呼び出すとuser_feed
、Javascript promise オブジェクトが出力されます。I の場合、コントローラーreturn user_feed.get()
に戻ります。undefined
上記のコードのようにサービスでここで呼び出し、promise then ステートメントでデータ オブジェクトを返すundefined
と、コントローラーに戻ります。ただし、data
オブジェクトを印刷すると、正しい値になります。
このサービスからオブジェクトを返せないのはなぜですか? promise を使用する基本的な側面が欠けていますか?