2016-11-20 59 views
0

我有我的路线里面有很多这样的代码:节点快递MySQL连接错误处理优化

connection.query("query one", function(err, rows){ 
    if(err){ 
     console.log(err); 
    }else{ 
     connection.query("query two", function(err, rows){ 
      if(err){ 
       console.log(err); 
      }else{ 
       connection.query("query three", function(err, rows){ 
        if(err){ 
         console.log(err); 
        }else{ 
         connection.query("query four", function(err, rows){ 
          if(err){ 
           console.log(err); 
          }else{ 

          } 
         }); 
        } 
       }); 
      } 
     }); 
    } 
}); 

我结束了那么多的“如果(错误)”。我想知道是否有更好的方法来同时有效地处理这些错误。我可以写一个函数回调来处理所有这些错误:

var connection2 = function(connection, query, callback){ 
    connection.query("query one", function(err, rows){ 
     if(err){ 
      console.log(err); 
     }else{ 
      callback(rows); 
     } 
    }); 
} 

通过这种方式我可以摆脱所有的“如果(ERR)” S。 有没有更好的解决方案,想法或参考?

回答

0

可以使用的承诺,那么你的代码看起来像这样

query('...').then(rows => { 
}).then(query('...')).then(rows => { 
}).then(query('...')).then(rows => { 
}).catch(err => { 
    console.log(err) 
}) 

你需要的是返回一个承诺为

const query = (sql, values) => { 
    return new Promise((resolve, reject) => { 
    // maybe use a connection Pool and log the statement for debugging 
    connection.query(sql, values, (err, rows) => { 
     if (err) 
     return reject(err) 
     resolve(rows) 
    }) 
    }) 
} 
查询功能