我刚刚开始尝试使用 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 个单独的查询时,那又如何呢?我们是否只需将单个多语句查询编写为原子单元?虽然这个问题并不是数据库独有的。