我正在尝试使用我获得的数据填充$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
任何帮助表示赞赏!
答案 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
。