10 удобных методов работы с промисами в TypeScript

Промисы — важная часть асинхронного программирования в TypeScript. Они предоставляют способ обработки асинхронных операций и позволяют улучшить поток управления и обработку ошибок. В этой статье блога мы рассмотрим различные методы работы с обещаниями в TypeScript, используя разговорный язык и практические примеры кода.

  1. Promise.resolve():
    Метод Promise.resolve()создает решенное обещание с заданным значением. Это полезно, когда вы хотите преобразовать значение в обещание.

Пример:

const resultPromise = Promise.resolve("Hello, World!");
resultPromise.then((result) => {
  console.log(result); // Output: Hello, World!
});
  1. Promise.reject():
    Метод Promise.reject()создает отклоненное обещание с указанием причины. Это удобно, если вы хотите явно отклонить обещание.

Пример:

const errorPromise = Promise.reject(new Error("Something went wrong!"));
errorPromise.catch((error) => {
  console.error(error); // Output: Error: Something went wrong!
});
  1. 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"]
});
  1. 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
});
  1. Promise.then():
    Метод then()используется для обработки выполнения обещания. Для этого требуются две дополнительные функции обратного вызова: одна для случая выполнения и одна для случая отклонения.

Пример:

const promise = Promise.resolve("Hello");
promise.then(
  (result) => {
    console.log(result); // Output: Hello
  },
  (error) => {
    console.error(error);
  }
);
  1. 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!
});
  1. Promise.finally():
    Метод finally()используется для указания функции обратного вызова, которая будет выполняться при выполнении обещания, независимо от его результата. Обычно он используется для операций очистки.

Пример:

const promise = doSomeAsyncOperation();
promise.finally(() => {
  console.log("Cleanup");
});
  1. 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);
  }
}
  1. 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");
});
  1. Последовательная обработка нескольких обещаний.
    Чтобы последовательно обрабатывать несколько обещаний, вы можете объединить 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.