@doriulbool

Как дождаться выполнения функции и передать ее результат в переменную?

Есть код - два модуля на js, в первом на промисах написано последовательное выполнение и наполнение переменной результатами аджакс запросов. Во второй я использую эту функцию и хочу в зависимости от результата выполнить то или иной действие. Написать также на промисах не получилось. Прошу вашей помощи.

var module1 = (function(){
console.log('Module module1 is initiating');
function _sendsql2server(data){
promise = $.when();
data.sql.forEach(function (v,k){
  promise = promise.then(function(){
  return $.ajax({
    // код удален
  });
  }).then(function(thenResult){
  console.log('Запрос №'+k+' - выполнен');
  data.response.push({"data":thenResult.data,"msg":"Ok"});
  }, function(jqXHR, exception){
  	console.log('Ошибка');
    return $.Deferred();
  });
});
promise.then(function(){
return data;
console.log('Все ok');
});
}
return {_sendsql2server: _sendsql2server};
})();

var checkTableModule = (function (module1) {
$('form').on('submit', function(){
// вырезал код
var _sql= '...'; // Формирую переменую и отправляю ее в функцию
var result = module1._sendsql2server(_sql);
console.log(result);
if(result != ''){
  console.log('Данные присутствуют');
  somefunction1(result);
} else {
  console.log('Данные отсутствуют');
  somefunction2();
}
});
})(module1 || {});
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Можно подождать пару лет:
setTimeout(function(){
  console.log('уф, дождались!')
}, 63072000)

Но лучше так не делать, а почитать о промисах еще, пока не получится.
Вообще весь подход начиная со слов "дождаться выполнения и передать" - неправильный.

Сейчас вы пишете код в таком стиле:
1. Я запускаю aaa()
2. Теперь я хочу запустить bbb(), но чертов aaa() еще не закончил работу и не вернул результат! Что делать!?Паника!

А нужно писать так:
1. Пусть запустится aaa(), а после него запустится bbb()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы