Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Как сделать функцию асинхронной, если она состоит из нескольких функций в js? (https://javascript.ru/forum/css-html/83365-kak-sdelat-funkciyu-asinkhronnojj-esli-ona-sostoit-iz-neskolkikh-funkcijj-v-js.html)

mav1 23.11.2021 18:32

Хочу видеть вывод координат, но в консоли:

test.php:63 Uncaught ReferenceError: result is not defined

voraa 23.11.2021 18:44

Цитата:

Сообщение от mav1
Пробовал вот в этом примере: http://95.174.111.242:8091/maptest/test.php

Там ошибка лезет
Google Maps JavaScript API error: RefererNotAllowedMapError

У вас есть платный аккаунт в Google Maps, Этот IP к нему привязан?

voraa 23.11.2021 18:50

Цитата:

Сообщение от mav1
Хочу видеть в консоли вывод координат, но там:

А Вам кто-нибудь показывал такой пример
addressToCoords('Rome, Italy').then (coords => alert(coords));
	alert(result);

Я писал просто
addressToCoords('Rome, Italy').then (coords => alert(coords));

Координаты должны быть в coords.
Если сам Google Maps у вас нормально работает.

mav1 23.11.2021 19:09

Пробовал и как вы написали, и с дополнительным алертом в конце - все равно координаты не выводит никоим образом. Ограничения гугловые айпишные убрал временно.

Ваш вариант: http://95.174.111.242:8091/maptest/test2.php
Вариант с добавочным алертом в конце: http://95.174.111.242:8091/maptest/test.php

рони 23.11.2021 19:36

mav1,
geocoder.geocode + promise:

voraa 23.11.2021 19:48

В geocode должна передаваться не просто строка с адресом, а объект
https://developers.google.com/maps/d...rence/geocoder
https://developers.google.com/maps/d...eocoderRequest

Вот тут они показывают пример
https://developers.google.com/maps/d...ript/geocoding
geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == 'OK') {

Попробуйте вызывать
addressToCoords({address:'Rome, Italy'}).then (coords => alert(coords))

mav1 24.11.2021 01:14

В итоге попробовал вот такой вариант:

addressToCoords({address:'Rome, Italy'}).then (coords => alert(coords[0].geometry.location))


и получил необходимые координаты в алерте. Но проблема осталась в их использовании далее - если сразу после данной строки я добавлю, к примеру:

alert(coords[0].geometry.location);


то при запуске страницы у меня сначала будет выводиться этот алерт (разумеется, undefined, ведь addressToCoords еще не успела сработать), а только потом будет срабатывать уже addressToCoords() со своим алертом (уже с координатами).

Как теперь добавить код, который будет использовать полученные координаты, чтобы он срабатывал только ПОСЛЕ того, как отработает addressToCoords() ? Не запихивая его внутрь самой addressToCoords() или в .then()

Aetae 24.11.2021 01:42

mav1, ты бы уже десять раз успел прочитать учебник если бы в стену головой не долбился.

Асинхронные функции работают только с асинхронными, синхронные с синхронными. Всё. Совместить - никак.
1. Ты делаешь асинхронный запрос к геокодеру.
2. Ты ничего не ждёшь, а сразу делаешь alert.
3. Идёт время.
4. Приходит ответ геокодера.

Почему же alert ничего не показал, а?

Что и как делать - расписано в учебнике, конкретное решение проблемы также предложено в этой теме.

Ты хочешь готовый код и не хочешь думать? Ну извини, попробуй поставить задачу на фрилансе.

mav1 24.11.2021 01:42

запихал все в .then() и обрел дзен. Работает, и ладно. Не очень чтоб накладно

mav1 24.11.2021 01:44

Цитата:

Сообщение от Aetae (Сообщение 541808)
Асинхронные функции работают только с асинхронными, синхронные с синхронными.

Да, это вроде уложилось теперь в голове, статью почитал


Часовой пояс GMT +3, время: 22:47.