2016-11-28 48 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

謝謝。我使用$ q對API進行異步調用。你的建議很簡單,但我認爲缺省的$ http。(verb)是同步的。情況並非如此嗎? – cnak2

+0

在這種情況下,因爲.then(),但我認爲你需要它,以便你可以處理響應數據。 – jbrown