[英]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 循环将所有请求刷新在一起。 使用此技术您无法控制查询执行流程。
有两种方法可以实现这一点
第二种方式是使用异步模块 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.