Клуб API Карт

Помогите, пожалуйста, как дождаться ответа геокодера?

Пост в архиве.

Вот есть код, который проверяет, внутри мкада точка или нет.

 

function checkMkad(address){
            var promise = new ymaps.util.Promise();
            var myGeocoder = new ymaps.geocode(
                // Строка с адресом, который нужно геокодировать
                address, {
                    boundedBy:[[56.440485,36.264110],[55.062017,38.851390]],
                    strictBounds: true,
                    results: 1
                }
            );
            myGeocoder.then(
                function (res) {
                    if (res.geoObjects.getLength()) {
                        // кладем мкад в переменную
                        var mkad_polygon = myCollection.get(0);

                        // берем результат из геокодера
                        var position = res.geoObjects.get(0).geometry.getCoordinates();
                       
                        // если результат попадает в контуры полигона мкада
                        mkadCheck = mkad_polygon.geometry.contains(position);
                        // mapUpdateResult(mkadCheck);   
                        promise.resolve(mkadCheck);
                    }
                }
            );
            return promise;
        }

 

И мне надо, чтобы функция вернула либо true, либо false. Вроде все работает, но промис возвращает какой-то объект, а не true или false. Помогите, пожалуйста, чайнику )

5 комментариев
Владислав Турман
28 января 2016, 00:20

.then произойдет тогда, когда будет получен ответ от геокодера, а ваша функция checkMkad к тому моменту уже закончит выполнение и вернет объект, который вы и получаете.

 

Прочитайте про ассинхронность. Информации много даже в клубе яндекса.

 

По сути, вызвав свою функцию вы никогда не получите return сразу, тот, который true или false. Вам надо ждать ответа геокодера, обработать его, проверить на вхождение в мкад и только тогда получать результат.

И насколько я знаю, вы не так использовали promise.

Лучше обрисовать МКАД полигоном и проверять вхождение точки в полигон, без лишних запросов к геокодеру, тем более что МКАД не прямоугольный и boundedBy тут не будет работать как надо

Пример и код полигона есть на гитхабе

http://dimik.github.io/ymaps/examples/2.1/delivery-calculator/

https://github.com/dimik/ymaps/tree/gh-pages/examples/2.1/delivery-calculator

 

А как проверить вхождение точки в полигон без запроса к геокодера? mkad_polygon это описанный и размещеннай на карту полигон мкада из множества точек, он взят был по примеру с клуба. Т.е., где-то я читал, что если не разместить полигон и точку на карту, то нельзя будет проверить вхождение этой точки внутро полигона!!!

В том примере что я привел, полигоны на карте не размещаются, достаточно добавить их геометриям карту для расчетов