2016-09-14 35 views
2

我正在使用twitch.tv api并使用Angular $资源工厂。我试图使用的端点是:GET/channels /:channel。我想要做的是获得每个数组元素的通道。我试过/频道/用户[1]但我知道这是错误的。如何获得阵列中所有用户的channel:channel?还是有更好的方法来做到这一点?

(function() { 
     angular.module('twitch', ['ngResource']) 

     .controller('TwitchController', ['$scope', 'TwitchAPI', function($scope, TwitchAPI) { 
     $scope.getAPI = function(){ 
      var users = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"]; 
      for(var i = 0; i < 8; i++){ 
      TwitchAPI.get({channel: users.i}); 
     } 
     } 
     $scope.online = []; 
     $scope.offline = []; 


    }]) 

    .factory('TwitchAPI', function TwitchAPIFactory($resource){ 
    return $resource('https://api.twitch.tv/kraken/channels/:channel', { callback: "JSON_CALLBACK" }); 
    }); 
})(); 

回答

0

首先,你并不需要使用JSONP作为抽搐API支持CORS请求,你可以配置你$resource像这样

return $resource('https://api.twitch.tv/kraken/channels/:channel', {}, { 
    get: { 
     method: 'GET', 
     headers: { 
      Accept: 'application/vnd.twitchtv.v3+json', 
      'Client-ID': 'Your client ID' 
     } 
    } 
}) 

如果你真的想使用JSONP,你可以”吨发送请求的报头信息,因此必须像

return $resource('https://api.twitch.tv/kraken/channels/:channel', { 
    callback: 'JSON_CALLBACK', 
    api_version: 3, 
    client_id: 'your client ID' 
}, { 
    get: { 
     method: 'JSONP' 
    } 
}) 

不噜K类似于有一种方式来获得在同一时间超过一个通道(参考:https://github.com/justintv/Twitch-API/blob/master/v3_resources/channels.md),但你应该能够并行

这样做可以创建承诺的简单数组这样

var promises = users.map(user => TwitchAPI.get({channel: user}).$promise); 

然后,您可以等待所有承诺使用$q.all

$q.all(promises).then(channels => { 
    angular.forEach(channels, channel => { 
     // access each channel's properties here 
     console.log('Channel name:', channel.display_name); 
    }); 
}); 

只是不要忘记注入$q服务来解决。

+0

谢谢!我仍然在学习Angular,所以我会尝试一下你的解决方案。 – labanch

+0

我怎样才能从api获取数据?会是这样的:user.url? @Phil – labanch

+0

@labanch对不起,我不明白这个问题。每个请求的响应应该在'angular.forEach'循环中使用的'channel'变量中可用。它应该看起来像这样〜https://github.com/justintv/Twitch-API/blob/master/v3_resources/channels.md#get-channelschannel – Phil