Promise в битрикс
В Битрикс Promise отличается от стандартного.
В стандартном Promise в конструктор передаются функции resolve и reject,
которые вызываются соответственно после успешного исполнения или возникновения ошибки.
В Битрикс эти методы не передаются. Вместо этого для успешного выполнения используется метод promise.fulfill,
а для обработки ошибок - метод promise.reject.
Пример: промисификация для ajax
// промисификация нативным Promise
const promisifyAjax = (data) => {
return new Promise((resolve, reject) => {
ajax({
data,
success: response => resolve(response),
error: error => reject(error)
})
});
}
// использование
promisifyAjax({ id: 1 })
.then(response => console.log(response))
;
// промисификация BX Promise
const bxPromisifyAjax = (data) => {
// контруктор не умеет принимать аргументы-функции
const promise = new BX.Promise();
// вместо resolve и reject надо вызвать методы fulfill либо reject с объекта-промиса
ajax({
data,
success: response => promise.filfull(response),
error: error => promise.reject(error)
})
return promise;
}
bxPromisifyAjax({ id: 1 })
.then(response => console.log(response))
;
В стандартном промисе .then() всегда возвращает Promise, поэтому можно вызывать их по цепочке:
В Битрикс, если .then() возвращает undefined, то цепочка не продолжится. Необходимо, чтобы метод возвращал что-то отличное от undefined. Например, можно вернуть null: