Javascript node.js同步mysql查询
我正在node.js中使用mySql数据库 我正在从googleMaps sanpToRoad Api获取lat长路由,并将该数据插入到我的表中,但它没有插入到流中(序列)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
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)
所以它将与我的代码冲突,我无法获得正确的地图路径流
请帮助我。问题是将所有请求一起刷新循环。使用此技术无法控制查询执行流 有两种方法可以实现这一点
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);
});