【问题标题】:Nodejs and Expressjs avoid nested callback queriesNodejs 和 Expressjs 避免嵌套回调查询
【发布时间】:2018-05-25 02:13:43
【问题描述】:

我正在使用:

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

欢迎提出任何建议。

谢谢。

【问题讨论】:

    标签: node.js express


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您的建议,我会努力的。
    【解决方案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.
    });
    

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2019-04-18
      • 2013-08-01
      • 1970-01-01
      相关资源
      最近更新 更多