Promise.try теперь является базовой версией Недавно доступно

Джереми Вагнер
Jeremy Wagner

Опубликовано: 17 января 2025 г.

Выполнение асинхронной работы в Интернете может быть сложной задачей, и многое из того, что делается в Интернете, связано с асинхронностью. Независимо от того, включает ли это вызовы fetch или другие асинхронные операции, браузеры упрощают выполнение этой работы, когда встроенные методы обеспечивают надежную обработку ошибок. Это уже было предусмотрено для промисов с использованием методов then , catch finally .

Несмотря на это, способ проектирования кодовой базы вашего приложения должен быть гибким, и не все, что вы будете делать в своем приложении, обязательно будет асинхронным. Иногда вам может потребоваться обработать результат обратного вызова таким образом, который был бы проще, если бы не имело значения, является ли обратный вызов, который вы передали в Promise , синхронным или нет. Promise.try — это метод, который теперь доступен во всех основных браузерных движках, который упрощает его для разработчиков, а это означает, что теперь он доступен в версии Baseline Newly.

Что такое Promise.try и как он работает?

Promise.try — это удобный метод, который упрощает обработку ошибок для синхронных функций обратного вызова, чем если бы вы использовали Promise.resolve :

// If the callback is synchronous and it throws
// an exception, the error won't be caught here:
new Promise(resolve => resolve(callback());

// But it will be here:
Promise.try(callback);

Затем, используя методы then , catch и finally , обработайте разрешение или отклонение Promise :

Promise.try(callback)
  .then(result => console.log(result))
  .catch(error => console.log(error))
  .finally(() => console.log("All settled."));

Что, если ваша функция обратного вызова имеет аргументы? Вы можете справиться с этим одним из двух способов:

// This creates an extra closure, but works:
Promise.try(() => callback(param1, param2));

// This doesn't create an extra closure, and still works:
Promise.try(callback, param1, param2);

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

Заключение

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