djQuery
@djQuery
"Кодируем помаленьку" ("Сказка о Тройке")))

Как вернуть результат функции внутри функции?

Имеем код типа

let x = outer();

function outer(){
  ...
  $.post("/some/url", {...}, function( data, textStatus, jqXHR ){ return jqXHR.responseText });
  ...
}


Как, в конце концов, получить в переменную xзначение jqXHR.responseText?
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Без использования промисов или коллбеков - никак.

На самом деле очень просто:
let x;
outer();

function outer(){
  ...
  $.post("/some/url", {...}, function( data, textStatus, jqXHR ){ // <-- вот эта анонимная функция, это и есть коллбэк
    x = jqXHR.responseText // вот и все
    return jqXHR.responseText
});
  ...
}


Сложности возникают оттого, что значение это присвоится ПОСЛЕ того, как post запрос будет отправлен и ПОСЛЕ того, как с сервера вернется ответ.

Читать что-то из этого, подберите статью с доступным уровнем излоджения.
Ответ написан
Комментировать
rockon404
@rockon404
Frontend Developer
Почитайте про асинхронное программирование и о том, как организуют код при использовании колбеков.

Один из многочисленных вариантов решения проблемы:
function outer() {
  return new Promise(resolve => {
    $.post('/some/url', {...}, (data, textStatus, jqXHR) => resolve(jqXHR.responseText));
  });
}

(async () => {
  const x = await outer();
})();
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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