javascript – 从promise返回的对象是未定义的

我试图将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)
})

相关文章

最后的控制台返回空数组.控制台在ids.map函数完成之前运行va...
我正在尝试将rxJava与我已经知道的内容联系起来,特别是来自J...
config.jsconstconfig={base_url_api:"https://douban....
我正在阅读MDN中的javascript,并且遇到了这个谈论承诺并且不...
config.jsconstconfig={base_url_api:"https://douban....
这是我的代码main.cpp:#include<string>#include<...