Node.js承诺使用Q.

时间:2015-02-08 23:57:37

标签: javascript node.js promise q

我有一个Node应用程序,我正在编写我需要使用promise进行异步调用的地方。

我目前在promise的.then(function())中调用了一个foreach循环,但是当我返回foreach的最终结果时,我什么都没得到。

在foreach中我可以console.log获取数据的值并检索它,但是在返回之前不能在for循环之外吗?

var Feeds = function(){
    this.reddit = new Reddit();
}

Feeds.prototype.parseRedditData = function(){
    var _this      = this;

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

Feeds.prototype.getData = function(endpoint){
    var deferred = q.defer();

    https.get(endpoint, function(res) {
        var body = '';

        res.on('data', function(chunk) {
            body += chunk;
        });

        res.on('end', function() {
           deferred.resolve(JSON.parse(body));
        });
    }).on('error', function(e) {
        deferred.reject(e);
    });

    return deferred.promise;
}

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;

        data.push(post);
    }


    return data;
}

1 个答案:

答案 0 :(得分:-1)

Feeds.prototype.parseRedditData = function(){
    var _this      = this;

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

当我看到这个时,我看到了&#34;返回&#34;在承诺的回调中...我不知道你为什么要这样做,但我只想确定:

我想要这个&#34;返回&#34;作为函数&#39; parseRedditData&#39;的返回值,这不会起作用。

在这里返回数据的唯一方法是使用回调或承诺,如下所示:

Feeds.prototype.parseRedditData = function(callack){
    var _this      = this;

    this.getData(this.reddit.endpoint).then(function(data){
        callback(_this.reddit.parseData(data, q));
    });
}