[英]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.