簡體   English   中英

從promise返回的對象是未定義的

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM