node.js - 链接 promise

标签 node.js promise q

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

我正在使用 Q用于创建以下两个 promise 的模块:

阅读标题

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;
};

写标题

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

我做错了什么?

最佳答案

then 需要传递一个函数而不是一个值

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

关于node.js - 链接 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296606/

相关文章:

node.js - Visual Studio 2015 社区版,打开文件夹丢失

javascript - 如何识别 socket.io 中的用户?

mysql - NodeJS - MySQL 和 Unicode 字符串乱码

javascript - 试图理解 Ember JS 的 promise

javascript - 系列 promise

javascript - 使用一个参数 promise .then()

node.js - 为 SAP CAP 应用程序定义自定义 Express 端点

javascript - Promise 如何在 Node.js 和 AWS lambda 函数中工作

javascript - 从 firebase 的 onCall 函数返回 promise 的正确方法?

javascript - "Q.longStackSupport = true"放在哪里?