Асинхронный / ожидающий результат пустой после ожидающего выполнения - PullRequest
1 голос
/ 12 марта 2019

У меня есть простая функция:

var result = '';
var url = 'http://someurl.com/?action=perform-action';

(async function() {
    let a = await fetch(url)
    result = await a.text();
})()

console.log(result)

Я пытаюсь поместить результат в переменную, но он ничего не возвращает.Моя функция просто проверяет, существует ли электронное письмо, введенное во входные данные, в нашей базе данных.Результат - «Существует» или «ОК».Хорошо работает, когда я отправляю его на консоль, но мне нужен результат для выполнения других действий.Если я сохраню его в результат , он ничего не показывает.

1 Ответ

3 голосов
/ 12 марта 2019

В конечном итоге ваша переменная result будет включать ответ от выборки, но вы отображаете результат до того, как выборка завершит свой вызов.

Давайте аннотируем заказ:

var result = ''; // 1
var url = 'http://someurl.com/?action=perform-action'; // 2

(async function() {
    let a = await fetch(url); // 5
    result = await a.text(); // 6
})() // 3

console.log(result); // 4

Если вы переместили свой вызов console.log в функцию async после того, как был установлен результат, вы бы достигли своей цели, например:

var result = '';
var url = 'http://someurl.com/?action=perform-action';

(async function() {
    let a = await fetch(url)
    result = await a.text();
    console.log(result);
})()

Если цель состоит в том, чтобы сделать что-то с этим результатом вне асинхронного вызова - как где-то еще в вашей платформе - вам нужно наблюдать за изменениями или вызывать функцию «после результата» (которая может быть внедрена обратный вызов.)

Вот рабочий пример:

var result = '';
var url = 'https://jsonplaceholder.typicode.com/todos/1';

(async function() {
    const a = await fetch(url);
    result = await a.text();
    console.log(result);
})()
...