【发布时间】:2026-01-18 12:55:01
【问题描述】:
我刚开始尝试使用 node(使用 Express 构建一个带有 MySql 数据库的简单网站)。
我基本上已经使用了 Express 提供的应用程序结构(就这个问题而言,这并不重要)。我有一个文件routes/index.js,它导出index 函数,每当对我的主页发出请求时,该函数就会被命中。 index.js的内容是:
var db = require('../db');
exports.index = function(req, res){
db.getConnection(function(err, connection) {
connection.query('SELECT * FROM test_table', function (err, rows) {
var templateVariables = {
title: 'Index Page',
response: rows[0].text
};
res.render('index', templateVariables);
});
connection.end();
});
};
这显然是一个非常初步和轻量级的示例,但是在这个特定的索引页面GET 请求中,已经有一组深度为 3 的回调函数。每个 callbuck 必须存在于“父”的回调中,因为它取决于结果(在顺序执行的语言/环境中,这将是显而易见的和微不足道的)。
我的问题是,在构建更复杂且可能非常大的应用程序时,如何避免出现大量嵌套回调函数的问题?当您对逻辑有顺序依赖时,当然会出现这种情况。我知道 Node 的理念是异步的,但是当谈到等待来自数据库的数据并说我们正在运行 5 个单独的查询时,那会怎样呢?我们是否只需将单个多语句查询编写为原子单元?虽然这个问题并不是数据库独有的。
【问题讨论】:
标签: javascript node.js callback express