Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js同步mysql查询_Javascript_Mysql_Node.js_Google Maps_Asynchronous - Fatal编程技术网

Javascript node.js同步mysql查询

Javascript node.js同步mysql查询,javascript,mysql,node.js,google-maps,asynchronous,Javascript,Mysql,Node.js,Google Maps,Asynchronous,我正在node.js中使用mySql数据库 我正在从googleMaps sanpToRoad Api获取lat长路由,并将该数据插入到我的表中,但它没有插入到流中(序列) var pool=mysql.createPool({ 连接限制:10, 主机:“localhost”, 用户:'根', 密码:“”, 数据库:“myTestDb” }); var googleAPILink=https://roads.googleapis.com/v1/snapToRoads?path=“+lastLat

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

我正在从googleMaps sanpToRoad Api获取lat长路由,并将该数据插入到我的表中,但它没有插入到流中(序列)

var pool=mysql.createPool({
连接限制:10,
主机:“localhost”,
用户:'根',
密码:“”,
数据库:“myTestDb”
});
var googleAPILink=https://roads.googleapis.com/v1/snapToRoads?path=“+lastLat+”、“+lastLong+”|“+currentLat+”、“+currentLong+”&interpolate=true&key=GOOGLE_-MAP_-key”;
控制台日志(googleAPILink);
var roadResponse=请求(googleAPILink,函数(错误,响应,正文){
如果(!error&&response.statusCode==200){
responseData=JSON.parse(body);
对于(i=0;i
所以,这里如果谷歌地图API以lat long routes顺序返回我

(一)

纬度:12.3456789, 长:12.3456789

(二)

拉脱维亚:23.1456789, 长:23.1456789

(三)

拉脱维亚:34.1256789, 长:34.1256789

然后可能是第一条插入记录3),然后可能是插入记录1),然后可能是插入记录2)

所以它将与我的代码冲突,我无法获得正确的地图路径流


请帮助我。

问题是将所有请求一起刷新循环。使用此技术无法控制查询执行流

有两种方法可以实现这一点

  • 不要在循环中调用insert查询。例如,准备一个查询 在tableName(字段1、字段2、字段3)中插入值(val1、val2、val3),(val1、val2、val3),。。。。 像这样创建查询并执行一次,这将在一个db调用中完成,而不是在多个db调用中完成
  • 第二种方法是使用异步模块 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);
    });
    

  • 我认为问题在于你把异步代码和同步代码混在一起了。for循环的每次迭代都会触发一个
    INSERT
    查询,并且您在回调中直接使用在for循环中创建的
    post
    对象,因此无法保证
    post
    将保留哪些值,因为INSERT查询是异步的,无法知道何时执行它。
        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);
    });