簡體   English   中英

node.js 同步 mysql 查詢

[英]node.js synchronously mysql query

我正在使用 mySql 數據庫在 node.js 中工作。

我正在從 googleMaps sanpToRoad Api 獲取經緯度路線並將該數據插入我的表中,但它沒有插入流(序列)

var pool  = mysql.createPool({
    connectionLimit : 10,
    host            : 'localhost',
    user            : 'root',
    password        : '',
    database        : 'myTestDb'
});


var googleAPILink = 'https://roads.googleapis.com/v1/snapToRoads?path='+lastLat+','+lastLong+'|'+currentLat+','+currentLong+'&interpolate=true&key=GOOGLE_MAP_KEY';

console.log(googleAPILink);

var roadResponse = request(googleAPILink, function (error, response, body) {

    if (!error && response.statusCode == 200) {

        responseData = JSON.parse(body);


        for(i = 0; i < responseData.snappedPoints.length; i++) {

            var locationArrayObject = responseData.snappedPoints[i];

            var locationArrayObjectInsider = (locationArrayObject.location);

            var roadLat = locationArrayObjectInsider.latitude;

            var roadLong = locationArrayObjectInsider.longitude

            var rideStatus = rows2[0].status;

            var rideStartedAns = 'n';

            if(rideStatus == 's')
            {
                rideStartedAns = 'y'
            }



            var post  = {
                            tripid: rideId,
                            latitude: roadLat, 
                            road_longitude: roadLong,
                            rideStarted: rideStartedAns,
                            routeRideCounter: routeCounter,
                            status: 'y'
                        };



            pool.getConnection(function(err, connectDB4) {

                var qry = connectDB4.query('INSERT INTO tbl_rout SET ?', post, function(err5, result5) {
                    console.log(qry.sql);
                    connectDB4.release();
                });
            });
        }

    }
});

所以,在這里,如果谷歌地圖 API 以經緯度路線返回我,如

1)

緯度:12.3456789,長:12.3456789

2)

緯度:23.1456789,長:23.1456789

3)

緯度:34.1256789,長:34.1256789

那么它可能是首先插入記錄 3) 然后可能是插入記錄 1) 然后可能是插入記錄 2)。

所以它會與我的代碼沖突,我無法獲得正確的地圖道路路徑。

請幫我。

問題是您的 for 循環將所有請求刷新在一起。 使用此技術您無法控制查詢執行流程。

有兩種方法可以實現這一點

  1. 不要在循環中調用插入查詢。 准備一個查詢,例如 INSERT INTO tableName(field1, field2, field3) VALUES(val1,val2,val3), (val1,val2,val3),.... 創建這樣的查詢並執行它一次這將在一個中完成db 調用而不是許多
  2. 第二種方式是使用異步模塊 async.eachSeries 將執行您的查詢而不是刷新,這將按順序輸入數據。 檢查下面的示例。

     do npm install async --save var async = require('async'); async.eachSeries(responseData.snappedPoints , function(snappedPoint , cb){ var locationArrayObject = snappedPoint; var locationArrayObjectInsider = (locationArrayObject.location); var roadLat = locationArrayObjectInsider.latitude; var roadLong = locationArrayObjectInsider.longitude var rideStatus = rows2[0].status; var rideStartedAns = 'n'; if(rideStatus == 's') { rideStartedAns = 'y' } var post = { tripid: rideId, latitude: roadLat, road_longitude: roadLong, rideStarted: rideStartedAns, routeRideCounter: routeCounter, status: 'y' }; pool.getConnection(function(err, connectDB4) { var qry = connectDB4.query('INSERT INTO tbl_rout SET ?', post, function(err5, result5) { console.log(qry.sql); connectDB4.release(); cb(); }); }); }, function(){ console.log('execuation completed); });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM