【发布时间】:2017-06-06 07:15:50
【问题描述】:
我正在使用 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 以 lat-long 路线序列返回我,例如
1)
纬度:12.3456789, 长:12.3456789
2)
纬度:23.1456789, 长:23.1456789
3)
纬度:34.1256789, 长:34.1256789
那么它可能是第一个插入记录 3) 然后可能是插入记录 1) 然后可能是插入记录 2)。
所以它会与我的代码冲突,我无法获得正确的地图道路路径。
请帮帮我。
【问题讨论】:
-
我认为问题在于您将异步代码与同步代码混合在一起。您的 for 循环的每次迭代都会触发一个
INSERT查询,并且您直接在回调中使用在 for 循环中创建的post对象,因为您的插入查询是异步的,所以无法保证post将保持什么值,有无法知道何时执行。
标签: javascript mysql node.js google-maps asynchronous