Можно ли разрешить ошибку обещания для обещания более высокого порядка? - PullRequest
0 голосов
/ 27 марта 2019

Можно ли разрешить ошибку обещания для обещания более высокого порядка? EX

new Promise(async (resolve, reject) => {
   //call async function

   await async_function(resolve, reject);
})

const async_function = async (resolve, reject) => {
  // some code 
  get_data_from_db
     .then(data => resolve(null,data))
     .catch(e => resolve(e, null)
}

get_data_from_db может вызывать другие асинхронные функции. отклонение не вернуло ошибку к более высокому обещанию

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Это нормально, чтобы решить обещание

иногда это нормально.Думайте об отклоненном обещании как об «асинхронном» и блокирующем блоке для него

, но ваш код является примером antipattern http://bluebirdjs.com/docs/anti-patterns.html#the-explicit-construction-anti-pattern

const async_function = async (resolve, reject) => {
  // some code 
  get_data_from_db
     .then(data => resolve(null,data))
     .catch(e => resolve(e, null)
}

, который вы можете переписать как:

const async_function = () =>
  get_data_from_db()
     .catch(e => e) // it will be resolved with e
0 голосов
/ 27 марта 2019

Поскольку await работает и на не-обещаниях, вы можете сохранить всю конструкцию Promise:

const async_function = () => get_data_from_db(); 

(async()=>{
    try {
        //call async function
        const data = await async_function();
        console.log(data);

    } catch (err) {
        console.error(err.message);
    }
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...