承诺:然后没有定义(异步调用)

时间:2016-05-16 19:03:51

标签: angularjs promise

我正在尝试使用我获得的数据填充$scope.data

function getUserData(callback) {
    FB.api('/me/friends', function (response) {
        if (callback) return callback(response.data);
        return response.data;
    });
}

因为它是异步调用,所以我使用promise来填充它。

此方法可在我的控制器中找到:

Typekit.GetData().then(function (data) {
     $scope.data = data;
});

这是我的工厂:

App.factory('TypekitService', ['$http', '$q', function ($http, $q) {
      return {
          GetData: function () {
               return getUserData(callback);
               function callback(data) {
                   var deferred = $q.defer();
                   deferred.resolve(window.userRates);
                   return deferred.promise;
               }
          }
      }
}]);

不幸的是,我得到了:

Cannot read property 'then' of undefined

任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:1)

实际上,将在实际返回数据时创建承诺。尝试以下方面:

GetData: function () {
     var deferred = $q.defer();
     getUserData(function(data) {
         deferred.resolve(data);
     });
     return deferred.promise;
}

这样您就可以返回promise(因此定义了GetData(...).then())并且只有解析回调中的promise。

答案 1 :(得分:1)

因为getUserData没有返回承诺

function getUserData(callback) {
    return FB.api('/me/friends', function (response) {
        if (callback) return callback(response.data);
        return response.data;
    });
}

function getUserData(callback) {
    var p = $q.defer()
    FB.api('/me/friends', function (response) {
        if (callback) return callback(response.data);
        p.resolve(response.data)
    });
    return p.promise
}

答案 2 :(得分:0)

您指的是Typekit的服务,但工厂将其显示为TypekitService