#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
обещания не меняет этого обещания, оно выведет результат, который вы затем присвоите переменной, поэтому вам нужно записать этот вывод, а не только исходную функцию / обещание.