node.js - Nodejs 和 Expressjs 避免嵌套回调查询

标签 node.js express

我正在使用:

  • nodejs (0.6.8)
  • expressjs (2.5.2)
  • socket.io (0.8.7)
  • Node -db-mysql (0.7.6)

目前代码工作正常,但我想知道是否有办法避免回调嵌套函数:

查询:

/************************* 
 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>';
                        }
                        ...

欢迎任何建议。

谢谢。

最佳答案

您可以使用async模块可以干净地管理您可以想象的任何异步流控制场景。

关于node.js - Nodejs 和 Expressjs 避免嵌套回调查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13662649/

相关文章:

node.js - 如何获取 SockJS 连接的(Express 的)sessionID

node.js - 即使有更多行,Typeahead 也仅显示 1 行

javascript - Node.js-Express : Weird local paths

html - 如何使用node js从mongodb检索用户完整数据

angularjs - 使用 Passportjs 从 Angularjs ( http get/resource ) 进行用户身份验证

javascript - 使用nodejs和express不断出现404错误

node.js - 在 10M ffmpeg 停止在 nodejs 上保存视频之后

javascript - 重构 Express-Handlebars 辅助函数以分隔文件

javascript - Node 中的 request.post 抛出 { code : undefined, Reason: 'Argument error, options.body.' }

node.js - npm scripts 两个破折号是什么意思?