链接承诺

时间:2014-06-18 23:31:35

标签: node.js promise q

我想要实现的是解析给定的网站并将其标题写入titles.txt。我使用request模块获取网站,使用cheerio获取标题。

我使用Q模块创建以下两个承诺:

readTitle

var readTitle = function(url) {
    var deferred = Q.defer();
    request({
        url: url
    }, function(err, response, body) {
        var $ = cheerio.load(body);
        deferred.resolve($("title").text());
    });
    return deferred.promise;
};

writeTitle

var writeTitle = function(title) {
    var deferred = Q.defer();
    fs.appendFile('titles.txt', title + "\n", function() {
        deferred.resolve();
    });
    return deferred.promise;
};

我希望以下脚本将GoogleStack Overflow写入文本文件:

readTitle('http://www.google.com')
.then(writeTitle)
.then(readTitle('http://www.stackoverflow.com'))
.then(writeTitle);

但实际上我得到的是:

Google
undefined

我做错了什么?

1 个答案:

答案 0 :(得分:5)

then需要传递函数而不是值

.then(function() {return readTitle('http://www.stackoverflow.com'); })
.then(writeTitle);