Есть функция getMessageText() которая создает AJAX-запрос и функция formatText() которая форматирует ответ запроса в строку и возвращает её как messageText. Вопрос в том, как мне записать в переменную внутри getMessageText значение которое возвращает formatText(), если formatText() это handler события?
function getMessageText() {
let messageXHR = new XMLHttpRequest();
messageXHR.open('get', 'http://www.randomtext.me/api/gibberish/p-1/10-45/');
messageXHR.addEventListener('readystatechange', formatText);
messageXHR.send();
function formatText() {
if (messageXHR.readyState != 4) {
return;
}
if (messageXHR.status === 200) {
let messageText = JSON.parse(messageXHR.responseText).text_out.slice(3, -5);
return messageText;
}
}
}
Попробовал способ предложеный в комментариях. Не работает, так как запрос асинхронный, и сначала getMessageText() возвращает formattedMessage = undefined, а уже потом когда запрос окончен в formattedMessage записывается нужное значение. Использовать синхронный запрос не вариант, так как таких запросов возможно будет много.
function getMessageText() {
let messageXHR = new XMLHttpRequest(),
formattedMessage;
messageXHR.open('GET', 'http://www.randomtext.me/api/gibberish/p-1/10-45/');
messageXHR.addEventListener('readystatechange', formatText);
messageXHR.send();
function formatText() {
if (messageXHR.readyState != 4) {
return;
}
if (messageXHR.status === 200) {
messageText = JSON.parse(messageXHR.responseText).text_out.slice(3, -5);
formattedMessage = messageText;
}
}
return formattedMessage;
}
let formattedMessage;в функцииgetMessageTextи вformatTextопределяете её значениеformattedMessage = messageText. В чём проблема? – vihtor Jan 14 '18 at 13:15getMessageTextвозвращается до того, как отработаетformatText. – Jan 14 '18 at 14:12getMessageText()после того как отработалformatText()– Вадим Яровой Jan 14 '18 at 14:25