«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Обещания JavaScript: основы, которые вам нужно знать

Обещания JavaScript: основы, которые вам нужно знать

Опубликовано 8 ноября 2024 г.
Просматривать:889

JavaScript Promises: The Basics You Need to Know

Введение

JavaScript — это однопоточный язык программирования, то есть он может выполнять только одну задачу одновременно. Это становится сложнее при использовании асинхронных операций, таких как получение данных или установка таймеров, которые могут заблокировать поток выполнения и замедлить работу вашего приложения.

Чтобы справиться с этими асинхронными задачами, не замораживая поток, мы встречаем Promise — мощный инструмент, который упрощает асинхронное программирование. С помощью Promises вы можете более эффективно управлять долго выполняющимися задачами, писать более чистый и читаемый код и избегать ужасного «ада обратных вызовов.»

В этой статье я стремлюсь познакомить вас с тем, что такое обещания, как они работают и как упрощают асинхронное программирование.

Что такое обещание?

Представьте, что вы заказываете еду в ресторане. Сделав заказ, вам не придется ждать на кухне, пока приготовят еду. Вместо этого вы занимаетесь беседой или наслаждаетесь атмосферой, пока кухня на заднем плане готовит вам еду. Ресторан обещает подать вам еду, как только она будет готова. Вы можете доверять этому обещанию, потому что в конечном итоге произойдет одно из двух: либо ваша еда будет доставлена ​​(выполнена), либо кухня сообщит вам, что они не могут выполнить заказ (отклонено ).

В JavaScript Обещания работают аналогичным образом. Когда вы просите JavaScript сделать что-то, что требует времени (например, получение данных с сервера), он возвращает обещание. Это Обещание не дает вам немедленного результата. Вместо этого он сообщает вам: «Я свяжусь с вами, когда работа будет завершена.» В течение этого времени остальная часть вашего кода продолжает выполняться. После завершения задачи Обещание имеет следующий вид:

  • Выполнено (задача выполнена успешно), или
  • Отклонено (задача не удалась), и вы можете соответствующим образом обработать результат.

Как обещания работают в JavaScript

Обещание представляет собой значение, которое может быть доступно сейчас, в будущем или никогда. Он имеет три состояния:

  • В ожидании: задача все еще выполняется, и окончательный результат (выполнен или отклонен) еще не определен.
  • Выполнено: задача успешно выполнена, результат доступен.
  • Отклонено: задача не выполнена, и можно обработать ошибку

1. Создание обещания

Чтобы создать Promise, вы используете конструктор Promise, который принимает функцию (известную как исполнитель), имеющую два параметра: разрешить и отклонить. Функция разрешения вызывается, когда обещание выполняется, а функция отклонения вызывается, когда оно отклонено.

const myPromise = new Promise((resolve, reject) => {
  // Simulating an asynchronous task (e.g., fetching data)
  const success = true; // Simulate success or failure

  if (success) {
    resolve("Operation completed successfully!"); // Fulfill the promise
  } else {
    reject("Operation failed."); // Reject the promise
  }
});

2. Решение и отказ от обещаний

После создания обещания вы можете определить его результат, вызвав функцию разрешения или отклонения:

  • solve(value): вызовите эту функцию после успешного завершения асинхронной операции. Он передает значение обработчикам, ожидающим выполнения обещания.
  • отклонить (ошибка): вызовите эту функцию в случае сбоя операции. Он передает сообщение об ошибке обработчикам, ожидающим отклонения обещания.

3. Потребление обещаний

После того как вы создали обещание, следующим шагом будет его использование. JavaScript предоставляет несколько методов для обработки результатов обещаний: .then(), .catch() и .finally(). Каждый из этих методов служит определенной цели и позволяет эффективно управлять результатами асинхронных операций.

  • Обработка выполненных обещаний с помощью .then(): метод .then() используется для указания того, что должно произойти, когда Обещание выполнено. Он принимает два необязательных аргумента: обратный вызов для разрешенного значения и еще один для обработки отклонений.
const fetchData = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve("Data fetched successfully!");
    }, 1000);
  });
};

fetchData()
  .then(result => {
    console.log(result); // Logs: Data fetched successfully!
  });
  • Обработка отклонений с помощью .catch(): метод .catch() специально разработан для обработки ошибок, возникающих во время выполнения обещания. Это делает его простым способом борьбы с отказами.
const fetchWithError = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject("Error fetching data."); // Simulating an error
    }, 1000);
  });
};

fetchWithError()
  .then(result => {
    console.log(result);
  })
  .catch(error => {
    console.error(error); // Logs: Error fetching data.
  });
  • Заключительные действия или действия по очистке с использованием .finally(): метод .finally() позволяет выполнить код после того, как обещание было выполнено, независимо от того, было ли оно выполнено или отклонено. Это полезно для действий или задач по очистке, которые должны выполняться как в сценариях успеха, так и в сценариях сбоя.
fetchData()
  .then(result => {
    console.log(result); // Logs: Data fetched successfully!
  })
  .catch(error => {
    console.error(error); // Handle error
  })
  .finally(() => {
    console.log("Promise has settled."); // Logs after either success or failure
  });

Если кратко:

  • then(): используйте этот метод для обработки разрешенного значения обещания.
  • catch(): используйте этот метод для обработки ошибок, когда обещание отклонено.
  • Final(): этот метод запускает код после того, как обещание будет выполнено, независимо от результата, позволяя выполнить очистку или заключительные действия.

4. Цепочка обещаний

Одной из самых мощных функций промисов является их способность объединяться в цепочки, что позволяет последовательно выполнять несколько асинхронных операций. Это означает, что каждая операция перед выполнением ожидает завершения предыдущей, что особенно полезно, когда задачи зависят друг от друга.

Давайте рассмотрим следующий пример:

const fetchUserData = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ userId: 1, username: "JohnDoe" });
    }, 1000);
  });
};

const fetchPosts = (userId) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(["Post 1", "Post 2", "Post 3"]); // Simulated posts
    }, 1000);
  });
};

// Chaining Promises
fetchUserData()
  .then(user => {
    console.log("User fetched:", user);
    return fetchPosts(user.userId); // Pass userId to the next promise
  })
  .then(posts => {
    console.log("Posts fetched:", posts);
  })
  .catch(error => {
    console.error("Error:", error);
  });

В этом примере функция fetchUserData возвращает обещание, которое разрешается с информацией о пользователе. Разрешенное значение затем передается функции fetchPosts, которая возвращает еще одно обещание. Если какое-либо из этих обещаний отклонено, ошибка перехватывается в последнем методе .catch(), что позволяет эффективно обрабатывать ошибки по всей цепочке.

Заключение

В заключение, промисы — это важнейшая часть современного JavaScript, позволяющая разработчикам обрабатывать асинхронные операции более структурированным и эффективным способом. Используя Promises, вы можете:

  • Упростите управление асинхронными задачами и избегайте ада обратных вызовов.
  • Объедините несколько асинхронных операций в цепочку, чтобы обеспечить четкий поток выполнения.
  • Эффективно обрабатывайте ошибки с помощью единого подхода.

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

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/dev-v/javascript-promises-the-basics-you-need-to-know-8k2?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3