我试图将getstream API包装在角度服务(工厂)中
这是我的代码:
.factory('FeedStream', function($http, $q) {
var client = stream.connect('xxxxxxxxxxx');
return {
Feed : function() {
$http.get('/api/Feed/auth/')
.success(function(auth) {
var user_Feed = client.Feed('user', auth.user, auth.token);
console.log(user_Feed.get());
user_Feed.get().then(function(data) {
console.log(data);
return data;
})
})
},
}
首先,我使用端点/ api / Feed / auth /从我的服务器获取user_id和auth令牌.这个数据以有角度的承诺返回.
接下来,我使用此数据调用getstream api来获取user_Feed对象.如果我返回此对象(user_Feed),则在控制器中未定义.如果我在服务中将其打印到控制台,则它具有正确的值.我注意到在返回后打印发生了半秒左右.为什么这个变量的赋值是异步发生的?
现在,如果我在console.log语句中调用此user_Feed对象上的get方法,则会打印出一个Javascript promise对象.如果我返回user_Feed.get(),它会将undefined返回给控制器.如果我在上面的代码中在服务中调用它,并在promise then语句中返回数据对象,则将undefined返回给控制器.但是,如果我打印数据对象,它具有正确的值.
为什么我不能从此服务返回任何对象?我错过了使用承诺的一些基本方面吗?
解决方法:
您尚未返回Feed promise对象,并且尚未正确地从Feed方法返回数据.所以为了达到同样的目的,请使用.then over $http来保持承诺链接
码
return {
Feed : function() {
//return `$http.get` promise
return $http.get('/api/Feed/auth/')
.then(function(response) {
var auth = response.data;
var user_Feed = client.Feed('user', auth.user, auth.token);
console.log(user_Feed.get());
//return `$http.get` to return internal promise
return user_Feed.get().then(function(data) {
console.log(data);
return data;
})
})
},
}
调节器
FeedStream.Feed().then(function(data){
console.log("data returned by user Feed", data)
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。