Я определяю некоторые переменные и использую их для получения значения, которое работает, но после передачи переменной в другую функцию не работает - PullRequest
1 голос
/ 06 апреля 2019

Проблема, с которой я сталкиваюсь, заключается в следующем.

Я создаю некоторые переменные в функции с ключевым словом var x = 0; в какой-то момент я назначаю новое значение x, а затем записываю его в консоль, и оно показывает правильное значение. но когда я пытаюсь использовать x (новое значение) для объединения его со строкой / ссылкой, я получаю 0 вместо нового значения.

Я попытался оставить x без 0 и после этого сказать неопределенное. Где я здесь не так?

Пробовал: var x; var x = 0;

в первом сценарии он будет неопределенным, а во втором - 0.

    geocode();
    function geocode() {

    var lng = 0;
    var lattitude = 0;
    var lattitudeb = 0;
    var lngb = 0;

    var locationA = '1234';
    var locationB = '1323';

    axios.get('https://maps.googleapis.com/maps/api/geocode/json', {
        params: {
            address: locationA,
            key: 'AIzaSyBpHiHzK323fsregSMCDbgX33xAUB_Cwwi8'
        }
    }).then(function (response) {

        lattitude = response.data.results[0].geometry.location.lat;
        lng = response.data.results[0].geometry.location.lng;


       console.log(lattitude);
       console.log(lng);
    }).catch(function (error) {
        console.log(error);
        });

    axios.get('https://maps.googleapis.com/maps/api/geocode/json', {
        params: {
            address: locationB,
            key: 'AIzaSyBpHiHzK3434fdf3434rferfeX33xAUB_Cwwi8'
        }
    }).then(function (response) {

        lattitudeb = response.data.results[0].geometry.location.lat;
        lngb = response.data.results[0].geometry.location.lng;

        console.log(lattitudeb);
        console.log(lngb);
    }).catch(function (error) {
        console.log(error);
    });

    axios.get('https://maps.googleapis.com/maps/api/distancematrix/json', {
        params: {
            units: 'imperial',
            origins: lattitude + ',' + lng, // here i get always 0 instead 
                                               of the new updated value
            destinations: lattitudeb + ',' + lngb,
            key: 'AIzaSyBpHirfserfserfser434efddf3ISMCDbgX33xAUB_Cwwi8'
        }
    }).then(function (r) {
        console.log(r);
    }).catch(function (e) {
        console.log(e);
    });

}

1 Ответ

1 голос
/ 06 апреля 2019

Эти три запроса:

    axios.get('https://maps.googleapis.com/maps/api/geocode/json', {
    axios.get('https://maps.googleapis.com/maps/api/geocode/json', {
    axios.get('https://maps.googleapis.com/maps/api/distancematrix/json', {

отправляются практически одновременно. Третий выходит до того, как первый получает широту и другие вещи. Значение lattitude в этот момент все еще равно нулю.

Вот почему вы должны: отправить первое, .then отправить в зависимости от его вывода. И хорошей практикой будет передавать требуемые данные в качестве возвращаемого значения первого обещания вместо использования внешней переменной.

На самом деле, здесь # 3 опирается на результаты # 1 и # 2, а # 1 и # 2 независимы, я правильно понял? Следовательно, правильный шаблон будет

Promise.all([
//... first request here
//... second request here
])
.then(
//... third request here
...