2017-02-26 32 views
0

私はnodejsプログラミングの初心者です。nodejsとmysqlでいくつかの残りのAPI呼び出しを書いています。私はnodejs mysqlクエリを通してテーブルを更新したいが、ここで私は非同期コールバックES6は約束を内蔵していますNodejsでmysqlクエリのシリアル実行を書くには

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

可能であれば、[Sequelize](http://sequelizejs.com)のようなものを使用してください。これにより、フロー制御で容易に対処できる約束が得られます。 ['Promise.each'](http://bluebirdjs.com/docs/api/promise.each.html)は、一連の非同期呼び出しを繰り返し実行する非常に簡単な方法です。代わりにコールバックが必要な場合、['async'](https://github.com/caolan/async)ライブラリがあなたを助けることができます。 – tadman

答えて

0

:issue.Iはserially.I約束もまだ同じ結果に

コードを試してみましたクエリを実行します。以下は、ES6の約束事を使って、コードを同期的または連続的に実行する方法のデモンストレーションです。

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);} 
関連する問題