Здрасте!
При вызове функции, она отправляет 2 запроса на геокодер:
1) "Смоленск, " + улица
2) Искать улица в квадрате от центра
Если первый запрос, вернул координаты цента, то беру данные из второго. Например, если в Смоленске будем искать улицу Шевченко, то сработает данные из первого запроса верные, а если Уколово, то это за пределами города и корректные данные вернет второй запрос.
Проблема в том, что геокодер возвращает результат не сразу, а спустя какое-то время, поэтому сначала сделал так, отправляю сразу два запроса, через таймаут сравниваю значения. Но я так понял можно оптимизировать функцию использую Promise, т.е.
var pointcoords = center;
var promise = new ymaps.util.Promise();
promise.then(
function (pointcoords) {
console.log("поиск по строке");
// поиск по строке
ymaps.geocode("Смоленск, " + street, {
results: 1
}).then(function (res) {
if (res.geoObjects.getLength()) {
var point = res.geoObjects.get(0);
pointcoords = point.geometry.getCoordinates();
}
});
return pointcoords;
}).then(function (pointcoords) {
// при необходимости делаем второй запрос
if (pointcoords[0] == center[0] && pointcoords[1] == center[1]) {
console.log("поиск в квадрате");
// точки для области
var p1 = ymaps.coordSystem.geo.solveDirectProblem(center, dir1, 10000).endPoint;
var p2 = ymaps.coordSystem.geo.solveDirectProblem(center, dir2, 10000).endPoint;
ymaps.geocode(street, {
boundedBy: [p1, p2],
results: 1,
strictBounds: true
}).then(function (res) {
if (res.geoObjects.getLength()) {
var point = res.geoObjects.get(0);
pointcoords = point.geometry.getCoordinates();
}
});
}
});
promise.resolve(pointcoords);
почему-то promise не отрабатывает первый запрос, подозрение, что из-за задержки ответа геокодера, первый запрос возвращает координаты центра вместо искомых... может ли promise избавить от использования settimeout()