JavaScript .then() 
		
		
		
		Всем привет! 
	Я начинаю изучать yandex.api 2.х для интеграции с 1С. Очень надеюсь здесь найти ответ. В документации к api есть метод geocode() который отвечает за прямое и обратное геокодирование. Из 1С я хочу обращаться к методу geocode и в случае неудачного геокодирования заполнять таблицу адресами, которые не удалось отобразить на карте. Запрос geocode асинхронный. Функционал я пытаюсь реализовать с помощью функции findPlacemarkOnMap(). Код ниже: 
function findPlacemarkOnMap(adress, returnResult){
var myCollection = new ymaps.GeoObjectCollection();
ymaps.geocode(adress, {results: 1}).then(
function (res){
myCollection.add(res.geoObjects);
myMap.geoObjects.add(myCollection);	
if (myCollection.getLength() == 0) {returnResult = false} else {returnResult = true};
},
// Ошибка сервера или "плохие" входные данные
// Не срабатывает в случае неотображения объектов на карте
function (err){
alert(err.message);
});	
return returnResult;
}
		Проблема в том, что return returnResult срабатывает раньше, чем выполняется код в конструкции .then() Может я не в том месте присваивание прописываю или возврат?  | 
	
		
 асинхронные функции в отличие от синхронных не возвращают значение с помощью return; 
	Вам надо из function (res){ вызвать функцию обработчик передав в качестве параметра returnResult примерно вот так 
if (myCollection.getLength() == 0) {returnResult = false} else {returnResult = true};callback(returnResult)
 | 
	
		
 Вадим, Спасибо! 
	Подскажите, пожалуйста, как передать callback-функцию в запрос. Если не сложно - на моем примере.  | 
	
		
 Цитата: 
	
 
function findPlacemarkOnMap(adress,callback){
.......
var returnResult;
if (myCollection.getLength() == 0) {returnResult = false} else {returnResult = true};callback(returnResult);},
function (err){
alert(err.message);
});
};
function callback(r){alert(r)};
 | 
	
		
 Спасибо! Все получилось) 
	 | 
	
		
 Вадим, и снова здравствуйте) 
	Возникла необходимость в продолжении. Мне нужно организовать обращение к некоторой функции, которая будет вызывать результат геокодирования (не асинхронно). Если я напишу: function getResult(){ var result; findPlacemarkOnMap(adress, result); return result; } То несмотря на использование callback-функции getResult() вернет undefined. Есть какие-нибудь "обходы" асинхронности?  | 
	
		
 Цитата: 
	
 http://javascript.ru/forum/174893-post67.html т.е. только через указание callback, в котором можно будет использовать результаты геокодирования.  | 
	
		
 Цитата: 
	
 поэтому getResult всегда вернет undefined Обойти нельзя-по крайней мере это мое мнение а что Вы не работаете с callback функцией-ее Вы можете задать в любом месте и любого вида- Ps прочтите так же по ссылке melky то же самое работать через callback функцию  | 
	
		
 Ох, жесть)) я с ajax вообще не знаю как работать. 
	Я поняла, что в примере с сайта надо изменить Параметр async на false. Но что находится в url, и где надо указать мою функцию findPlacemarkOnMap() (и нужно ли в этом случае передавать в нее Callback)? Прошу прощения, если задаю смешные вопрос, я не спец в этом, пытаюсь разбираться. function req(){ return $.ajax({ async: false; url: '/foo.php', method: 'GET', success: function(data){ return data; } }); } var myData = req(); alert(myData);  | 
	
		
 Цитата: 
	
 разжую : в сделать задуманное не получится, использовать результат придётся не из return'а, а из функции-callback'a.  | 
| Часовой пояс GMT +3, время: 06:12. |