コールバック外のアクセス値に問題があります。以下のようなjsonがあります
[ { Latitude: '3.59288601404616',
Longitude: '98.6827551573515',
Latitude1: '3.5828173285855724',
Longitude1: '98.69136337190866',
},
{ Latitude: '3.65865664490563',
Longitude: '98.6652326211333',
Latitude1: '3.5828173285855724',
Longitude1: '98.69136337190866',
} ]
コールバックが最初に終了するまで待たなければならないため、コールバックから値を取得することは不可能であると多くの Web を読んだことがあります。
私が取得したいのは、上に投稿したそのjson内に新しいjsonを追加することです。内部に距離jsonを追加したいので、node-google-distanceを使用します
私が欲しいのはこのようなものです
[ { Latitude: '3.59288601404616',
Longitude: '98.6827551573515',
Latitude1: '3.5828173285855724',
Longitude1: '98.69136337190866',
Distance '10127'
},
{ Latitude: '3.65865664490563',
Longitude: '98.6652326211333',
Latitude1: '3.5828173285855724',
Longitude1: '98.69136337190866',
Distance: '1836'
} ]
そして私のコードはこのように
models.xxxx.findAll({
where: {
UserId: req.params.UserId
},
attributes: ['Latitude', 'Longitude', [sequelize.literal('(SELECT Latitude FROM `xxxx` WHERE `id` = ' + req.params.MerchantId + ')'), 'Latitude1'],
[sequelize.literal('(SELECT Longitude FROM `xxxx` WHERE `id` = ' + req.params.MerchantId + ')'), 'Longitude1']
]
}).then(function(lists) {
var json = JSON.parse(JSON.stringify(lists));
function get_count(item, callback) {
var array = [];
for (var i = 0; i < json.length; i++) {
distance.get({
origin: json[i].Latitude1 + ',' + json[i].Longitude1,
destination: json[i].Latitude + ',' + json[i].Longitude
},
function(err, data) {
if (err) {
array.push(0);
} else {
array.push(data.distanceValue);
}
item.distanceValue = array;
});
}
callback(null, item);
}
async.map(json, get_count, function(err, results) {
console.log(results);
});
});
私が使用するasync.mapのは、この Web で誰かが
Javascript: return a value to a variable outside of a callback function を投稿したためです。stackoverflow で検索に多くの時間を費やしましたが、何も見つかりませんでした
この問題を解決する方法のヒントまたは例を教えてください