在不使用回调的情况下调用instagram API

时间:2016-06-01 06:44:44

标签: javascript angularjs

我通过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]);
        }        
    });
}]);

1 个答案:

答案 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;
});