Промисы — важная часть асинхронного программирования в TypeScript. Они предоставляют способ обработки асинхронных операций и позволяют улучшить поток управления и обработку ошибок. В этой статье блога мы рассмотрим различные методы работы с обещаниями в TypeScript, используя разговорный язык и практические примеры кода.
- Promise.resolve():
МетодPromise.resolve()создает решенное обещание с заданным значением. Это полезно, когда вы хотите преобразовать значение в обещание.
Пример:
const resultPromise = Promise.resolve("Hello, World!");
resultPromise.then((result) => {
console.log(result); // Output: Hello, World!
});
- Promise.reject():
МетодPromise.reject()создает отклоненное обещание с указанием причины. Это удобно, если вы хотите явно отклонить обещание.
Пример:
const errorPromise = Promise.reject(new Error("Something went wrong!"));
errorPromise.catch((error) => {
console.error(error); // Output: Error: Something went wrong!
});
- Promise.all():
МетодPromise.all()принимает массив обещаний и возвращает новое обещание, которое выполняется, когда выполняются все обещания в массиве, или отклоняется, если таковые имеются. обещания отклонить.
Пример:
const promise1 = Promise.resolve("Hello");
const promise2 = Promise.resolve("World");
const combinedPromise = Promise.all([promise1, promise2]);
combinedPromise.then((results) => {
console.log(results); // Output: ["Hello", "World"]
});
- Promise.race():
МетодPromise.race()принимает массив обещаний и возвращает новое обещание, которое выполняется или отклоняется, как только выполняется одно из обещаний в массиве. или отклоняет, в зависимости от того, что произойдет раньше.
Пример:
const promise1 = new Promise((resolve) => setTimeout(resolve, 1000, "Hello"));
const promise2 = new Promise((resolve) => setTimeout(resolve, 2000, "World"));
const winnerPromise = Promise.race([promise1, promise2]);
winnerPromise.then((result) => {
console.log(result); // Output: Hello
});
- Promise.then():
Методthen()используется для обработки выполнения обещания. Для этого требуются две дополнительные функции обратного вызова: одна для случая выполнения и одна для случая отклонения.
Пример:
const promise = Promise.resolve("Hello");
promise.then(
(result) => {
console.log(result); // Output: Hello
},
(error) => {
console.error(error);
}
);
- Promise.catch():
Методcatch()используется для обработки отклонения обещания. Это сокращение отthen(undefined, onRejected).
Пример:
const errorPromise = Promise.reject(new Error("Something went wrong!"));
errorPromise.catch((error) => {
console.error(error); // Output: Error: Something went wrong!
});
- Promise.finally():
Методfinally()используется для указания функции обратного вызова, которая будет выполняться при выполнении обещания, независимо от его результата. Обычно он используется для операций очистки.
Пример:
const promise = doSomeAsyncOperation();
promise.finally(() => {
console.log("Cleanup");
});
- async/await:
Синтаксисasyncиawaitобеспечивает более лаконичный способ работы с обещаниями. Ключевое словоasyncиспользуется для определения асинхронной функции, а ключевое словоawaitиспользуется для приостановки выполнения функции до тех пор, пока обещание не будет выполнено или отклонено.
Пример:
async function fetchData() {
try {
const response = await fetch("https://api.example.com/data");
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
}
- Promise.resolve() с setTimeout:
ИспользованиеPromise.resolve()сsetTimeout()позволяет создать отложенное обещание, которое выполняется через указанное время.
Пример:
function delay(ms: number): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, ms));
}
delay(2000).then(() => {
console.log("Delayed log after 2 seconds");
});
- Последовательная обработка нескольких обещаний.
Чтобы последовательно обрабатывать несколько обещаний, вы можете объединитьthen()метода.
Пример:
function fetchUserData(): Promise<User> {
// Simulate API call
return fetch("https://api.example.com/user").then((response) =>
response.json()
);
}
function fetchPosts(userId: string): Promise<Post[]> {
// Simulate API call
return fetch(`https://api.example.com/posts?userId=${userId}`).then(
(response) => response.json()
);
}
fetchUserData()
.then((user) => fetchPosts(user.id))
.then((posts) => {
console.log(posts);
})
.catch((error) => {
console.error(error);
});
В этой статье блога мы рассмотрели десять удобных методов работы с обещаниями в TypeScript. Эти методы, такие как Promise.resolve(), Promise.reject(), Promise.all(), Promise.race(), Promise.then(), Promise.catch(), Promise.finally(), async/awaitи другие предоставляют мощные инструменты для управления асинхронными операциями и обработки ошибок. Понимая и эффективно используя эти методы, вы сможете писать более чистый и эффективный код на TypeScript.