TypeScriptУрок 15 из 16
async/await и типизированные Promise
Promise<T> — обещание вернуть значение типа T чуть позже. await достаёт это значение, и TypeScript знает его тип.
Главное
- async-функция всегда возвращает Promise: async function load(): Promise<string>.
- У await fetchUser(1) тип User, а не Promise<User>.
- Promise.all ждёт несколько обещаний и сохраняет типы: [User, User].
- В catch ошибка имеет тип unknown — проверьте её через instanceof Error.
Пример
interface User { id: number; name: string;} // A stand-in for a real API call: it answers with a ready Promisefunction fetchUser(id: number): Promise<User> { return Promise.resolve({ id, name: id === 1 ? "Ada" : "Linus" });} async function greet(id: number): Promise<string> { const user = await fetchUser(id); // user: User return `Hi, ${user.name}`;} async function main(): Promise<void> { console.log(await greet(1)); const [a, b] = await Promise.all([fetchUser(1), fetchUser(2)]); // [User, User] console.log(`${a.name} & ${b.name}`);} main();fetchUser здесь заменяет настоящий запрос к серверу, поэтому результат всегда одинаковый. Promise.all вернул кортеж, и a.name и b.name уже строки.
Задание
Как пользоваться редактором⌘ Enter или Ctrl Enter — запустить код, ⇧ ⌘ Enter — проверить задание.Tab и Shift Tab сдвигают строку или выделение; Esc, затем Tab — выйти из редактора.Проверка сравнивает то, что напечатала программа, с заданием; пробелы в конце строк не важны.После двух неудачных проверок можно открыть решение. Ваш код сохраняется в этом браузере.Пусть getPrice отклоняет неизвестный товар ошибкой, total станет async и сложит цены через Promise.all, а main выведет «Order 1: 11» и «Order 2 failed: No price for pizza».
Вывод
Здесь появится то, что напечатает программа.