【发布时间】:2016-08-18 16:39:57
【问题描述】:
我是 Node.js 的新手,所以我仍然在关注异步函数和回调。我现在的难题是如何在异步操作中从文件中读取数据后返回响应。
我的理解是发送响应是这样的(这对我有用):
app.get('/search', function (req, res) {
res.send("request received");
});
但是,现在我想读取一个文件,对数据执行一些操作,然后在响应中返回结果。如果我想对数据执行的操作很简单,我可以这样做——内联执行它们,并保持对 res 对象的访问,因为它仍在范围内。
app.get('/search', function (req, res) {
fs.readFile("data.txt", function(err, data) {
result = process(data.toString());
res.send(result);
});
});
但是,我需要执行的文件操作又长又复杂,以至于我将它们分离到单独的文件中的自己的函数中。结果,我的代码看起来更像这样:
app.get('/search', function (req, res) {
searcher.do_search(res.query);
// ??? Now what ???
});
我需要致电res.send 以发送结果。但是,我不能直接在上面的函数中调用它,因为do_search是异步完成的。而且我不能在对do_search 的回调中调用它,因为res 对象不在该范围内。
有人可以帮我理解在 Node.js 中处理这个问题的正确方法吗?
【问题讨论】:
-
我会说,要么将
res对象作为参数传递给函数,要么将其作为参数传递给函数,然后在工作完成时调用它(即创建您自己的回调)。后者可能会更好,因为它不会将您的代码耦合到 Express 的 API。
标签: javascript node.js express asynchronous