Джс. Создавайте обещания и обрабатывайте ошибки, а затем прикрепляйте обратные вызовы обещаний.Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Джс. Создавайте обещания и обрабатывайте ошибки, а затем прикрепляйте обратные вызовы обещаний.

Сообщение Anonymous »

Моя цель — сделать возможным присоединение обратных вызовов дескрипторов позже. Я не уверен, что код в моем решении решает эту проблему, потому что проблема может быть в другом месте из-за плохого кода (дизайна) или отсутствия базовых знаний. Моя первая версия классов Request и Response:
class Request {

make(url, params) {
let p = fetch(url, params)
.then(this.doThing)
.then(this.doAnotherThing);

return new Response(p);
}

// methods like doThing and doAnotherThing ...

}

class Response {
responsePromise;

constructor(p) {
this.responsePromise = p;
}

handle(success, failure) {
this.responsePromise.then(success, failure);
}
}

Пример использования
let r = Request();
r.make('/order/update', { method: 'POST', body: {} }).handle((resposne) => { }, (error) => { });

Но я хочу отлавливать ошибки внутри метода make, потому что иногда метод handle не может вовремя отловить ошибки из-за более позднего вызова.
Мое текущее решение — создать вспомогательные обратные вызовы и поместить их в обещание:
class Request {

make(url, params) {
let p = fetch(url, params)
.then(this.doThing)
.then(this.doAnotherThing)
.catch(this.errorHandler);

return new Response(p);
}

doAnotherThing(response) {

// some job
return () => Promise.resolve(response);
}

errorHandler(error) {

// some job
return () => Promise.reject(error);
}

}

class Response {
responsePromise;

constructor(p) {
this.responsePromise = p;
}

handle(success, failure) {

result = responsePromise.

this.responsePromise.then(f => f()).then(success, failure);
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... acks-later
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»