[英]Objects returned from promise are undefined
我試圖將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對象。 如果我return user_feed.get()
它會將undefined
返回給控制器。 如果我在上面的代碼中在服務中調用它,並在promise then語句中返回數據對象,則將undefined
返回給控制器。 但是,如果我打印data
對象,它具有正確的值。
為什么我不能從此服務返回任何對象? 我錯過了使用承諾的一些基本方面嗎?
您尚未返回Feed promise object
,並且尚未正確地從feed
方法返回data
。 所以為了達到同樣的目的,請使用.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)
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.