2016-07-05 2 views
1

Я создаю API, который использует Коа и Бабель асинхр/ждутКак создать Promise с уловом по умолчанию, а затем обработчики

Каждое обещание в своих контроллерах функция выглядит следующим образом:

async function ... { 
    await Promise ... 
     .then(data => response function) 
     .catch(err => err function) 
} 

Каждое обещание имеет ту же самую функцию ответа и ошибки.

Есть ли способ для меня автоматически разрешить каждое обещание с тем же тогда/catch (как функция разрешения по умолчанию для обещания).

Тогда мой код будет выглядеть следующим образом:

async function ... { 
    await Promise ... 
} 

и обещание будет автоматически решительность/улов.

+1

Возможно, связанные с: [Поведение по умолчанию, если никакие другие функции прикован к обещанию] (http://stackoverflow.com/ Вопросы/37043102/default-behavior-if-no-other-functions-chain-to-a-prom/37043286 # 37043286) – jfriend00

+0

WTH вы не используете 'try {return response (wait wait)} catch (e) { err (e)} ', если вы используете async/wait? – Bergi

+0

Я использую это во многих случаях, но в этом случае я нет. – asuna

ответ

2

Применение Состав:

class MyPromise { 
    constructor(executor) { 
     this.promise = new Promise(executor); 
     this.promise = this.promise 
          .then(defaultOnFulfilled, defaultOnReject); 
    } 
    then(onFulfilled, onRejected) { 
     return this.promise.then(onFulfilled, onRejected); 
    } 
    catch(onRejected) { 
     return this.promise.catch(onRejected); 
    } 
} 

Который позволит вам сделать:

new MyPromise((resolve, reject) => {... }).then(() => { 
    // default actions have already run here 
}); 
+1

Похоже, что 'const applyDefaults = prom => expected.then (defaultOnFulfilled, defaultOnReject);' намного проще писать и использовать ... – Bergi

+0

@Bergi правильно, но я понял из вопроса OP, что они хотят иметь возможность «нового обещания» (исполнителем) 'и применимы ко всем цепочкам с ним. –

+1

Я думаю 'функция PromiseWithDefaults (исполнитель) {return new Promise (executor) .then (defaultOnFulfilled, defaultOnReject); } 'все равно будет делать это - не нужно« подкласса »' Promise' – Bergi

Смежные вопросы