我正在使用:
目前代码工作正常,但我想知道是否有办法避免回调嵌套函数:
查询:
/*************************
Queries
**************************/
var sql_states = 'SELECT ...';
var sql_colors = 'SELECT ...';
var sql_languages = 'SELECT ...';
/* ... more queries */
执行嵌套查询:
/*************************
Run queries
**************************/
db.query(sql_states).execute(function(error, r) {
if (error) {
req.session.error = 'Operation failed States';
res.redirect('back');
}
else if (r.length > 0)
{
for(var i in r){
states += '<option value="'+r[i]['id_state']+'">'+r[i]['name']+'</option>';
}
var colors = '';
db.query(sql_colors).execute(function(error, r) {
if (error) {
req.session.error = 'Operation failed Colors';
res.redirect('back');
}
else if (r.length > 0)
{
for(var i in r){
colors += '<option value="'+r[i]['id_color']+'">'+r[i]['name']+'</option>';
}
var languages = '';
db.query(sql_languages).execute(function(error, r) {
if (error) {
req.session.error = 'Operation failed Languages';
res.redirect('back');
}
else if (r.length > 0)
{
for(var i in r){
languages += '<option value="'+r[i]['id_language']+'">'+r[i]['name']+'</option>';
}
...
欢迎任何建议。
感谢。
答案 0 :(得分:2)
您可以使用async
模块干净地管理您可以想到的任何异步流控制方案。
答案 1 :(得分:2)
这是异步JavaScript开发中的典型问题。为了能够为您的异步函数创建一种串行执行路径,您可以使用各种解决方案来处理任何中型到大型项目。
https://github.com/caolan/async
https://www.npmjs.com/package/promise
我个人使用异步,因为我发现它有很好的记录。您可以使用async.each构造轻松解决嵌套回调问题。
async.each(openFiles, function(file, callback) {
// do processing for every file and return callback when async call is completed
}, function(err){
// execute this piece of code when all your processing is complete.
});