我通过Angular消费Instagram API。我没有认证就消耗它了。
我的代码如下所示。任何人都可以通过使用回调来建议这是否是调用此API的最佳方式。使用承诺有更好的方法吗?如果是这样,这看起来怎么样?另外,如何在此代码中添加错误处理程序?
factory.js
app.factory('socialMedia', ['$http', function($http){
return {
fetchInstagram: function(callback){
var url = "https://api.instagram.com/v1/users/*******/media/recent?client_id=*****&callback=JSON_CALLBACK";
$http.jsonp(url).success(function(response){
callback(response.data);
});
}
}
}]);
controller.js
app.controller("instagramCtrl", ["socialMedia", function (socialMedia) {
instagramCtrl = this;
this.instagramPosts = [];
this.loading = true;
socialMedia.fetchInstagram(function (data){
instagramCtrl.loading = false;
for(var i = 0; i < 5; i++){
instagramCtrl.instagramPosts.push(data[i]);
}
});
}]);
答案 0 :(得分:0)
不要使用callbacks
,它已成为过去。 $http
服务返回promise对象,这是更方便的选项(错误处理,承诺链接):
app.factory('socialMedia', ['$http', function($http){
return {
fetchInstagram: function() {
var url = "https://api.instagram.com/v1/users/*******/media/recent?client_id=*****&callback=JSON_CALLBACK";
return $http.jsonp(url).then(function(response) {
return response.data;
});
}
}
}]);
确保从fetchInstagram
方法返回Promise。
然后在控制器中你会像这样使用它:
socialMedia.fetchInstagram().then(function(data) {
$scope.data = data;
});