2016-11-28 3 views
0

APIを呼び出す角度のあるプロジェクトがあります。返された結果から値を参照する方法を理解しようとしており、console.logの結果を調べることでそれを把握しようとしています。ここでコンソールの結果から値のパスを特定します。

私のサービスコールさ:

var getUserCampaigns = function(userId){ 
    return $q(function(resolve, reject){ 
     $http.get(API_ENDPOINT.url + '/campaign/user/' + userId).then(function(result){ 
     if(result.status !== 200) { 
      reject(result); 
     } else { 
      resolve(result.data); 
      console.log('from service: ', result); 
     } 
     },function(error){ 
     console.log('There was an error in getting user campaigns: ', error); 
     reject(error); 
     }); 
    }); 
    }; 

ここでは、APIの呼び出しによって返されるものです:私のコントローラで

Returned campaign: e 
        $$state: Object 
         status: 1 
         value: Array[2] 
          0: Object 
           __v: 0 
           _id: "583bc4f3bbb04f2b65a34ebc" 
           description: "This is my description" 
           endDate: "2016-11-28T05:47:31.261Z" 
           goalAmount: 23000 
           mainImage: "image.gif" 
           ownerId: "58352f5d2632c371aa951be7" 
           postedOn: "2016-11-28T05:47:31.261Z" 
           startDate: "2016-11-28T05:47:31.261Z" 
           subtitle: "subtitle here see" 
           title: "Title of my campaign" 

、私はこのような結果を参照しよう:

getUserCampaigns:function(){ 
    this.campaigns = CampaignService.getUserCampaigns(self.userId); 
    console.log('Value: ' + this.campaigns.title); 
} 

しかし、コンソールログの「値」が「未定義」に戻ります。

私には何が欠けていますか?

答えて

0

あなたが約束を深く掘り下げているようです。典型的なパターンは、サービスが約束を返し、その約束をコントローラで処理することです。

まず、サービスは... $ http.get()が約束であり、別のサービスにそれをラップする必要はないことを理解しています。

app.service('CampaignService', function($http) { 
    this.getUserCampaigns = function(userId) { 
    return $http.get(API_ENDPOINT.url + '/campaign/user/' + userId); 
    }; 
}); 

コントローラでは、サービスによって返された約束を処理できます。

app.controller('MainCtrl', function(CampaignService) { 
    CampaignService.getUserCampaigns(self.userId).then(function(result) { 
    this.campaigns = result.data; 
    console.log('Value: ' + this.campaigns.title); 
    }); 
}); 
+0

ありがとうございました。 APIに非同期呼び出しを行うために$ qを使用していました。あなたの提案は物事をかなり単純化しますが、私はデフォルトの$ http。(動詞)がデフォルトで同期していると思います。そうじゃないの? – cnak2

+0

この場合、.then()が原因ですが、応答データを処理できるようにする必要があると想定しています。 – jbrown

関連する問題