Проанализируйте поведение этого фрагмента JavaScript/Node.js с промисами: async function f(){ return Promise.resolve(1); } console.log(f()); — что выводится, почему, и как правильно получить значение внутри асинхронной функции
Вывод: в консоль будет напечатан объект Promise, а не число. Например: `Promise { 1 }` или в новых версиях Node: `Promise { : 'fulfilled', : 1 }` (число 1 \,1\,1). Почему: ключевое слово `async` заставляет функцию всегда возвращать Promise. Тело `async function f(){ return Promise.resolve(\,1\,); }` фактически возвращает Promise, поэтому `f()` — это Promise, а `console.log(f())` выводит сам объект Promise синхронно, а не его разрешённое значение. Как правильно получить значение внутри асинхронной функции: - С помощью `then`: - Пример: - `async function f(){ return Promise.resolve(\,1\,); }` - `f().then(v => console.log(v)); // выведет 1` - С помощью `await` в асинхронном контексте (или IIFE): - Пример IIFE: - `(async () => { console.log(await f()); })(); // выведет 1` - Или, если разрешён top-level await в вашем окружении/модуле: - `console.log(await f()); // выведет 1` Коротко: `f()` — Promise, используйте `await f()` или `f().then(...)` чтобы получить значение 1 \,1\,1.
Почему: ключевое слово `async` заставляет функцию всегда возвращать Promise. Тело
`async function f(){ return Promise.resolve(\,1\,); }` фактически возвращает Promise, поэтому `f()` — это Promise, а `console.log(f())` выводит сам объект Promise синхронно, а не его разрешённое значение.
Как правильно получить значение внутри асинхронной функции:
- С помощью `then`:
- Пример:
- `async function f(){ return Promise.resolve(\,1\,); }`
- `f().then(v => console.log(v)); // выведет 1`
- С помощью `await` в асинхронном контексте (или IIFE):
- Пример IIFE:
- `(async () => { console.log(await f()); })(); // выведет 1`
- Или, если разрешён top-level await в вашем окружении/модуле:
- `console.log(await f()); // выведет 1`
Коротко: `f()` — Promise, используйте `await f()` или `f().then(...)` чтобы получить значение 1 \,1\,1.