2016-11-20 29 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) 
    }) 
    }) 
} 
查詢功能