Использование await из функции, возвращающей JSON в JavaScript

#javascript #node.js #json

#javascript #node.js #json

Вопрос:

У меня есть асинхронная функция, которая возвращает JSON:

 async function test() {
    var answer = { "status": 0 };
    return answer;
}
  

Случай 1: ее вызов с использованием await при вызове функции приводит к следующему результату:

 var test_k = await test();
console.log(test_k);
  

Вывод: { status: 0 }

Случай 2: ее вызов с использованием await позже возвращаемой переменной приводит к следующему результату:

 var test_p = test();

await test_p;
console.log(test_p);
  

Вывод: Promise { { status: 0 } }

Приведенные выше выходные данные создаются в Node.js v12.18.3 среде.

В случае 1 я могу получить доступ test_k.status . Я не могу сделать то же самое в случае 2. Мне нужно получить доступ к объекту JSON в случае 2. Как я могу это сделать?

Комментарии:

1. test_p это обещание. Результатом await test_p является желаемое значение: console.log(await test_p); .

2. (await test_p).status;

3. await test_p; будет ждать, пока test_p не будет разрешено, а затем вернет это значение. Поскольку вы ничего с этим не делаете, оно выбрасывается, и код продолжается. Представьте себе эту строку так, как будто new MyClass(); вы получаете что-то обратно, но это никогда не присваивается и не используется, поэтому это никак не влияет на остальной код.

Ответ №1:

Ваш код case 2 должен гласить:

 var test_p = test();

var output = await test_p;
console.log(output);
  

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