async and await
| Async returns a promise | |
| Pause for one | |
| Try around await | |
| Await in loops |
Async returns a promise
An async function always returns a promise, even when the body returns a plain value. TypeScript shows this in the return type as Promise around the value type. Callers can await it or chain it like any other promise.
async function getNumber(): Promise<number> {
return 1;
}
const p: Promise<number> = getNumber();
p.then(console.log);
Pause for one
Await pauses only the current async function until one promise settles. Other work on the event loop keeps moving meanwhile. The result comes back as a plain typed value.
async function run(): Promise<void> {
const n: number = await getNumber();
console.log(n);
}
run();
Try around await
A rejected awaited promise throws at the await point. Wrap the await in try and catch to handle that spot. Keep the try block small so only one risky call can fail there.
async function safeRun(): Promise<void> {
try {
const n = await getNumber();
console.log(n);
} catch (err: unknown) {
console.log(err);
}
}
Await in loops
Await inside a for loop runs items one after another in order. This serial style is simple and kind to rate limits. Use it when each step must finish before the next begins.
async function loadAll(ids: number[]): Promise<void> {
for (const id of ids) {
const n = await getNumber();
console.log(id, n);
}
}
Next: Promise.all
Article author: Arthur Isaev