node.js同步mysql查询

时间:2017-01-21 10:28:16

标签: javascript mysql node.js google-maps asynchronous

我正在使用mySql数据库在node.js中工作。

我从googleMaps sanpToRoad Api获取lat-long路径并将该数据插入到我的表中,但它没有插入流程(序列)

enum

所以,这里,如果谷歌地图API返回拉特长路线序列,如

1)

lat:12.3456789, 长:12.3456789

2)

lat:23.1456789, 长:23.1456789

3)

lat:34.1256789, 长:34.1256789

然后它可能是第一次插入记录3)然后可能是插入记录1)然后可能是插入记录2)。

因此它会与我的代码冲突,我无法获得正确的地图道路路径。

请帮帮我。

1 个答案:

答案 0 :(得分:1)

问题是你的for循环刷新所有请求。使用这种技术,您无法控制查询执行流程。

有两种方法可以实现这个目标

  1. 不要在循环中调用插入查询。例如,准备查询    INSERT INTO tableName(field1,field2,field3)VALUES(val1,val2,val3),(val1,val2,val3),.... 创建这样的查询并执行它一旦这将在一个db调用而不是很多
  2. 中执行它
  3. 第二种方法是使用异步模块 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);
    });