2017-02-26 21 views
0

Ich bin neu in Nodejs Programmierung, ich schreibe einige Ruhe-API-Aufrufe in Nodejs und MySQL, ich möchte meine Tabelle durch Nodejs MySQL Abfragen aktualisieren, aber hier bin ich einige Async-Callbacks konfrontiert issue.I wollen Abfragen ausführen serially.I Versprechen auch versucht, noch gleiche ErgebnisWie schreibe ich serielle Ausführung von mysql Abfragen in Nodejs

Code:

app.post("/storeData",function (req,response) 
    { 
     console.log(req); 
     var note = req.body.note; 
     var time = req.body.time; 
     var userid = req.body.userid; 
     var title = req.body.title; 

     var data = { 

      "code" : 0, 
      "message" : "fail" 
     }; 
     if(note!=null && time!=null && userid!=null && title!=null) 
     { 

      var flag = checkIdExist(userid); // this one is executing async 

       if(!flag) 
        { 
         var query = "insert into todo values('',?,?,?,?)" ; 
         connection.query(query,[note,userid,title,time],function (err,rows,fields) 
         { 
          if(!err) 
          { 
           data.code = 200; 
           data.message = "success"; 
          } 
          response.json(data); 
         }); 
        } 
       }); 

     } 
     else 
     { 
      data.code = 0; 
      data.message = "parameters are missing"; 
     } 
function checkIdExist(id) 
{ 
    var query = "select * from todo where userid = ? "; 
    connection.query(query,[id],function (err,rows,fields) { 

     if(err) 
     { 
      return false 
     } 
     else if(rows.length == 0) 
     { 
      return false 
     } 
    }); 

    return true 
} 
+0

Wenn Sie können, versuchen, so etwas wie verwenden [Sequelize] (http://sequelizejs.com), die Sie verspricht gibt, die mit Flusskontrolle hadern einfacher sind. ['Promise.each'] (http://bluebirdjs.com/docs/api/promise.each.html) ist eine sehr einfache Möglichkeit, eine Reihe von asynchronen Aufrufen nacheinander auszuführen. Wenn Sie stattdessen Rückrufe wünschen, kann Ihnen die Bibliothek "Async" (https://github.com/caolan/async) helfen. – tadman

Antwort

0

ES6 hat in Versprechen gebaut. Im Folgenden finden Sie eine Demonstration, wie Sie ES6 verwenden können, um Ihren Code synchron oder seriell auszuführen.

app.post("/storeData", function(req, response) { 
console.log(req); 
var note = req.body.note; 
var time = req.body.time; 
var userid = req.body.userid; 
var title = req.body.title; 

var data = { 

    "code": 0, 
    "message": "fail" 
}; 
if (note != null && time != null && userid != null && title != null) { 

    var checkIdExist = function() { 
     return new Promise((resolve, reject) => { 
      checkIdExist(userid, resolve, reject); // this one is executing async 
     }); 
    } 

    checkIdExist() 
     .then((flag) => { 
      if (!flag) { 
       var query = "insert into todo values('',?,?,?,?)"; 
       connection.query(query, [note, userid, title, time], function(err, rows, fields) { 
        if (!err) { 
         data.code = 200; 
         data.message = "success"; 
        } 
        response.json(data); 
       }); 
      } 
     }) 
     .catch((error) => { 
      console.log(error.message); 
     }); 
} else { 
    data.code = 0; 
    data.message = "parameters are missing"; 
}}); 
function checkIdExist(id, resolve, reject) { 
var query = "select * from todo where userid = ? "; 
connection.query(query, [id], function(err, rows, fields) { 

    if (err) { 
     reject(err.message) 
    } else if (rows.length == 0) { 
     resolve(false); 
    } 
}); 

resolve(true);} 
Verwandte Themen