Javascript Node.js Q promise forEach返回未定义

Javascript Node.js Q promise forEach返回未定义,javascript,node.js,http,promise,q,Javascript,Node.js,Http,Promise,Q,使用Q for Node.js,我承诺了一个HTTP请求,在调用另一个传递该HTTP请求响应的函数时,该函数将从HTTP请求中迭代JSON数组,构建一个新数组,并返回它 调试Reddit.prototype.parseData我可以看到HTTP JSON被传入,并且在for语句中,我可以在构建时使用console.logdata,但是在foreach的末尾,我不能使用console.log或返回数据对象,它返回未定义的 Reddit.js var Reddit = function(){

使用Q for Node.js,我承诺了一个HTTP请求,在调用另一个传递该HTTP请求响应的函数时,该函数将从HTTP请求中迭代JSON数组,构建一个新数组,并返回它

调试
Reddit.prototype.parseData
我可以看到HTTP JSON被传入,并且在for语句中,我可以在构建时使用console.log
data
,但是在foreach的末尾,我不能使用console.log或返回数据对象,它返回未定义的

Reddit.js

var Reddit = function(){
    this.endpoint = "https://www.reddit.com/r/programming/hot.json?limit=10";
}

Reddit.prototype.parseData = function(json, q){
    var dataLength  = json.data.children.length,
        data        = [];

    for(var i = 0; i <= dataLength; i++){
        var post    = {};

        post.url    = json.data.children[i].data.url;
        post.title  = json.data.children[i].data.title;
        post.score  = json.data.children[i].data.score;

        console.log(data); //returns data    

        data.push(post);
    }

    console.log(data); // returns undefined

    return data;
}

module.exports = Reddit;

正如@sholanozie所说,您没有从
parseRedditData
返回任何内容。我猜你想要的是:

var Feeds = function(){
    this.reddit = new Reddit();
    this.parseRedditData().then(function(data) {
        console.log(data);
    });
};
...
Feeds.prototype.parseRedditData = function(){
    var _this      = this;

    return this.getData(this.reddit.endpoint).then(function(data){
        return _this.reddit.parseData(data);
    });
}

您的
parseRedditData
方法将始终是未定义的,因为它不返回任何内容。当解析
getData
承诺时,通过记录
data
变量,您将看到预期的结果(假设代码中没有其他错误)。更新代码以从承诺返回某些内容,getData承诺上的
data
变量是http请求的结果,您应该使用
好的,所以我现在看到它工作了,但是,我仍然没有从Feeds.js的第9行的console.log返回任何东西,在Reddit.js中有什么我需要做的吗?您是指
Feed
构造函数的这部分:
this.parseRedditData()。然后(函数(数据){console.log(数据);})?是,console.log(数据);此实例中不返回任何内容,并且正在运行promise not Implemented函数。您可能在
Reddit.parseData
中的某个位置出错。您可以使用
this.parseRedditData().fail(函数(err){console.error(err.stack);})进行调试
var Feeds = function(){
    this.reddit = new Reddit();
    this.parseRedditData().then(function(data) {
        console.log(data);
    });
};
...
Feeds.prototype.parseRedditData = function(){
    var _this      = this;

    return this.getData(this.reddit.endpoint).then(function(data){
        return _this.reddit.parseData(data);
    });
}