0

コールバック外のアクセス値に問題があります。以下のような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 で検索に多くの時間を費やしましたが、何も見つかりませんでした

NodeJS がコールバック内の変数にアクセスできない

非同期コールバック関数から値を返す方法は?

NodeJS 非同期の戻り値を取得 (コールバック)

サイト 1

サイト 2

この問題を解決する方法のヒントまたは例を教えてください

4

0 に答える 0