0

feed-service.js ファイルからデータを取得しようとしている controller.js ファイルがあります。FEEDLY_USER_ID と FEEDLY_ACCESS_TOKEN はアクセス可能で、別の config.js ファイルで定義されています。

コントローラー.js:

$scope.feedlyGlobalAll = FeedService.getGlobalAll();

フィード-service.js:

var request = require('request');
var globalOptions = {
    url: 'https://cloud.feedly.com/v3/streams/contents?streamId=user/' + FEEDLY_USER_ID + '/category/global.all',
    auth: {
        'bearer': FEEDLY_ACCESS_TOKEN
    }
};

service.getGlobalAll = function(){
    request.get(globalOptions, function(error, response, body){
        if(!error && response.statusCode == 200){
            service.globalAll = JSON.parse(body);
            return service.globalAll;
        }
        // error code here //
   })
}

https.get() が機能しなかったため、「request」という npm パッケージを使用して GET を作成しています。この Feedly API 呼び出しには、ヘッダーで渡された URL、ユーザー ID、およびアクセス トークンが必要です。

私は読んでいて、どうやらコールバックまたはプロミスを使用することになっているようですが、どちらも機能させることができません。http.get() を使用すると、http.get().then(yada yada) による promise を利用できます。これは、別の場所で行っているforecast.io 呼び出しで機能します。request モジュールは明らかに .then() を許可していません。私は通常 TypeError に遭遇し、.then() は関数ではありません。

https.get() を実行しようとしたとき、使用していたコードは次のとおりです。私は成功した応答を得ることができませんでした。

var url = {
    url: 'https://cloud.feedly.com/v3/streams/contents?streamId=user/' + FEEDLY_USER_ID + '/category/global.all',
    'headers': {
        'Authorization': 'Bearer ' + FEEDLY_ACCESS_TOKEN
    }
};

https = require('https');
https.get(url).then(yada yada)

https.get 呼び出しの var url でさまざまなことを試しました。引用符の有無にかかわらず試してみました。リクエストモジュールで動作するように auth: bearer トークンだけを試しましたが、動作させることができませんでした。

この問題の解決策は次のいずれかです。

  1. 既存のリクエスト モジュール コードを使用したフィード サービスからコントローラへのコールバック。
  2. https.get リクエストの URL を形成する正しい方法を見つけたら、その promise 関数を利用できます。
4

1 に答える 1

0

リクエスト コールバック内で promise を使用します。

service.getGlobalAll = function() {
   return $q(function(resolve, reject) {
      request.get(globalOptions, function(error, response, body){
         if(!error && response.statusCode == 200){
            service.globalAll = JSON.parse(body);
            resolve(service.globalAll);
        } else {
          reject();
        }
     });
   });
};

$q (angular の promise api) は、サービスの依存関係として注入できます。上記のコードは、ライブラリの ajax 呼び出しが返されたときに解決される promise を返すため、.then() でアクセスできます。

于 2016-01-21T23:18:00.567 に答える