私はジオコーダーのnpmモジュールを使用してアドレスをlat、longに変換しています。 このAPIは、緯度と経度は、それぞれ、私はそれがempty.Thisが原因scope.Kindlyで取得されて行くlatlongArray
getLatLong
コールバックに渡すとき.Nowに変換すること、すなわちアドレスがgetLatLong
関数に渡され、その結果後に高速csv npm
モジュールを使用してファイルgoogle.csv
からアドレスを読み出します提案する。コールバックの配列が空です
const geocoder = require('geocoder');
const json2csv = require('json2csv');
const fs = require('fs');
const csv = require('fast-csv');
var stream = fs.createReadStream("google.csv");
var path = './google.csv';
var async = require('async');
var responseObj = {};
var latlongArray = [];
var asyncArray =[getCsvdata.bind(null, path, responseObj),
getLatLong.bind(null, responseObj)];
async.series(asyncArray ,function(err, result){
if(err){
console.log(err);
return err;
}
console.log(JSON.stringify(result));
})
function getCsvdata(path, responseObj, callback){
var SuccessArray = [];
var ErrorArray = [];
csv.fromPath(path)
.on('data', function (data) {
SuccessArray.push(data);
})
.on("error", function (data) {
ErrorArray.push(data);
})
.on('end', function() {
var ResultObject = {Success: SuccessArray, ErrorList: ErrorArray};
responseObj.adrressarray = ResultObject;
callback(null, ResultObject);
});
}
function getLatLong(responseObj, callback){
var responseArray = responseObj.adrressarray;
var geocodeArray = responseArray.Success.slice(1);
var geoLatLong = geocodeArray.map(function(x) {
var addressOfRow = x.toString();
geocoder.geocode(addressOfRow, function (err, data) {
if(err){
return callback(err);
}
var latitude = data.results[0].geometry.location.lat;
var longitude = data.results[0].geometry.location.lng;
var address = data.results[0].formatted_address;
var obj = [{"latitude":latitude,"longitude":longitude, "address":address}];
latlongArray.push(obj);
})
});
return callback(null, latlongArray);
}
これは、非同期関数のコールバックを使用してその変数にデータを格納しているため、コードを実行する前にコールバックが発生したために発生します。 – Salketer
これは本当です@Salketer – art12345