从 promise 返回的对象未定义
Objects returned from promise are undefined
我正在尝试将 getstream API 包装在 angular 服务(工厂)
中
这是我的代码:
.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 和身份验证令牌。此数据 return 编辑在 angular 承诺中。
接下来,我使用此数据调用 getstream api 以获取 user_feed
对象。如果我 return 这个对象 (user_feed
) 它在控制器中是未定义的。如果我在服务中将它打印到控制台,它就有正确的值。我注意到打印发生在 return 之后半秒左右。 为什么这个变量的赋值是异步发生的?
现在,如果我在 console.log 语句中调用此 user_feed
对象的 get
方法,则会打印出一个 Javascript promise 对象。如果我 return user_feed.get()
它 return s undefined
到控制器。如果我像上面的代码一样在服务中调用它,并且 return promise then 语句中的数据对象,它 returns undefined
到控制器。但是,如果我打印 data
对象,它具有正确的值。
为什么我不能 return 来自此服务的任何对象?我是否遗漏了使用承诺的一些基本方面?
您没有返回 feed 承诺 object
并且 data
没有从 feed
方法正确返回。因此,为了实现同样的事情,请使用 .then 通过 $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)
})
我正在尝试将 getstream API 包装在 angular 服务(工厂)
中这是我的代码:
.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 和身份验证令牌。此数据 return 编辑在 angular 承诺中。
接下来,我使用此数据调用 getstream api 以获取 user_feed
对象。如果我 return 这个对象 (user_feed
) 它在控制器中是未定义的。如果我在服务中将它打印到控制台,它就有正确的值。我注意到打印发生在 return 之后半秒左右。 为什么这个变量的赋值是异步发生的?
现在,如果我在 console.log 语句中调用此 user_feed
对象的 get
方法,则会打印出一个 Javascript promise 对象。如果我 return user_feed.get()
它 return s undefined
到控制器。如果我像上面的代码一样在服务中调用它,并且 return promise then 语句中的数据对象,它 returns undefined
到控制器。但是,如果我打印 data
对象,它具有正确的值。
为什么我不能 return 来自此服务的任何对象?我是否遗漏了使用承诺的一些基本方面?
您没有返回 feed 承诺 object
并且 data
没有从 feed
方法正确返回。因此,为了实现同样的事情,请使用 .then 通过 $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)
})