链接承诺

Amb*_*mps 2 node.js promise q

我想要实现的是解析给定的网站并将其标题写入titles.txt.我正在使用请求模块获取网站和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;
};
Run Code Online (Sandbox Code Playgroud)

writeTitle

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

我期待下面的脚本编写GoogleStack Overflow文本文件:

readTitle('http://www.google.com')
.then(writeTitle)
.then(readTitle('http://www.stackoverflow.com'))
.then(writeTitle);
Run Code Online (Sandbox Code Playgroud)

但我真正得到的是:

Google
undefined
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Rob*_*evy 5

then 需要传递函数而不是值

.then(function() {return readTitle('http://www.stackoverflow.com'); })
.then(writeTitle);
Run Code Online (Sandbox Code Playgroud)