Промисы в Bliss.js

Bliss.js предлагает упрощённый синтаксис для работы с асинхронными операциями в JavaScript, интегрируя промисы в удобные методы библиотеки. Основная цель — сократить количество шаблонного кода при обработке асинхронных действий и обеспечить читаемость цепочек вызовов.


Создание промисов

Промис в Bliss.js создаётся с помощью метода Bliss.Promise, который принимает функцию с двумя параметрами: resolve и reject.

let promise = Bliss.Promise((resolve, reject) => {
    setTimeout(() => {
        const success = true;
        if (success) {
            resolve("Операция выполнена успешно");
        } else {
            reject("Ошибка выполнения");
        }
    }, 1000);
});

Ключевой момент: объект promise в Bliss.js полностью совместим с нативными промисами JavaScript, что позволяет использовать стандартные методы .then, .catch и .finally.


Цепочки промисов

Bliss.js позволяет создавать цепочки промисов для последовательного выполнения асинхронных операций. Цепочка строится методом .then(), который принимает функцию с результатом предыдущего промиса.

Bliss.Promise((resolve) => resolve(5))
    .then(value => value * 2)
    .then(value => `Результат: ${value}`)
    .then(console.log);

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

Bliss.Promise((resolve) => resolve(10))
    .then(value => Bliss.Promise(resolve => resolve(value + 5)))
    .then(console.log); // Выведет 15

Обработка ошибок

Метод .catch() в Bliss.js позволяет перехватывать ошибки, возникшие в любом промисе цепочки. Также поддерживается reject внутри пользовательской функции промиса.

Bliss.Promise((resolve, reject) => {
    reject("Произошла ошибка");
})
.catch(error => {
    console.error("Ошибка:", error);
});

Дополнительный момент: для выполнения кода независимо от успеха или ошибки используется метод .finally(). Он не получает аргументов и выполняется после завершения всей цепочки.

Bliss.Promise(resolve => resolve("Ок"))
    .finally(() => console.log("Цепочка завершена"));

Комбинирование промисов

Bliss.js предоставляет удобные методы для работы с несколькими промисами одновременно:

  • Bliss.Promise.all(array) — ожидает завершения всех промисов в массиве и возвращает массив результатов. Если хотя бы один промис завершился с ошибкой, цепочка перейдёт в .catch.
Bliss.Promise.all([
    Bliss.Promise(resolve => resolve(1)),
    Bliss.Promise(resolve => resolve(2)),
    Bliss.Promise(resolve => resolve(3))
])
.then(results => console.log(results)); // [1, 2, 3]
  • Bliss.Promise.race(array) — завершает цепочку при первом выполненном или отклонённом промисе из массива.
Bliss.Promise.race([
    Bliss.Promise(resolve => setTimeout(() => resolve("Первый"), 100)),
    Bliss.Promise(resolve => setTimeout(() => resolve("Второй"), 200))
])
.then(console.log); // "Первый"

Асинхронные функции и промисы

Bliss.js интегрируется с синтаксисом async/await, что позволяет использовать промисы в более наглядной форме.

async function example() {
    const result = await Bliss.Promise(resolve => setTimeout(() => resolve(42), 500));
    console.log(result); // 42
}
example();

Преимущество: промисы Bliss.js полностью поддерживают стандартные механизмы JavaScript, включая обработку ошибок через try/catch.


Практические приёмы

  1. Сокращение вложенности Использование цепочек .then вместо колбэков уменьшает “ад колбэков” и улучшает читаемость кода.

  2. Повторное использование промисов Промис можно хранить в переменной и использовать в нескольких местах, не создавая заново асинхронную операцию.

  3. Комбинирование синхронного и асинхронного кода Любое значение, возвращённое из .then, автоматически оборачивается в промис Bliss.js, что упрощает смешанный код.


Bliss.js делает работу с асинхронностью в JavaScript более выразительной и удобной, сохраняя полную совместимость с нативными промисами и современными подходами async/await.