Как вернуть ответ от асинхронного вызова?

У меня есть функция foo, которая делает запрос Ajax. Как я могу вернуть ответ от foo?

Я пытался вернуть значение из обратного вызова success, а также присвоить ответ локальной переменной внутри функции и вернуть ее, но ни один из этих способов фактически не возвращает ответ.

function foo() {
    var result;

    $.ajax({
        url: '...',
        success: function(response) {
            result = response;
            // return response; // <- I tried that one as well
        }
    });

    return result;
}

var result = foo(); // It always ends up being `undefined`.
5083
задан Sparkm4n 18 July 2019 в 09:50
поделиться

1 ответ

Я думаю, какой метод или механизм, используемый, или независимо от того, что, платформа (Угловой/Реагирует), который скрывает его от Вас, следующий принцип содержит:

  1. В потоке программы (думают код или даже самый низкий уровень: машинный код), данные не могут вернуться 2 секунды спустя, 3 секунды спустя, или не могут прибыть вообще, таким образом, нет никакого обычного return для использования для возврата данных.

  2. Это - классический "шаблон"наблюдатель"". (Это может быть в форме "обратного вызова".) Это: "эй, я интересуюсь знанием успешного прибытия данных; Вы сообщили бы мне, когда это делает". Таким образом, Вы регистрируете наблюдателя, чтобы быть уведомленными (или функция, которую назовут для уведомления об успешном прибытии данных.) Вы также обычно регистрируете наблюдателя для отказа прибытия таких данных.

  3. , Когда это - успешное прибытие данных или отказ возврата таких данных, зарегистрированных наблюдателей (или обратные вызовы) уведомляют вместе с данными (или звонят с данными). Если наблюдатель будет зарегистрирован в форме функции обратного вызова foo, то foo(data) будет назван. Если наблюдатель регистрируется в форме объекта foo, то в зависимости от интерфейса, могло случиться так, что foo.notify(data) назван.

4
ответ дан 22 November 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: