использует .catch с asyn c await может вызвать проблемы? - PullRequest
0 голосов
/ 17 марта 2020

Мой вопрос: использование .catch с asyn c await может вызвать проблемы?

, например:

function f1() {
  return new Promise((res, rej) => {
    rej(1)
  })
}

async function f2() {
  await f1().catch(ex => { }) // this is what I mean
}

f2()

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Это зависит от того, что вы имеете в виду под «проблемой», но этот код:

async function f2() {
  await f1().catch(ex => { /* ... code in catch ... */ }) // this is what I mean
}

эквивалентен:

async function f2() {
  try {
    await f1()
  } catch (ext) {
    /* ... code in catch ... */
  } // this is what I mean
}

И, как вы сказали, это может быть полезно использовать .catch вместо try-catch как есть - не во всех случаях - сделать ваш код более читабельным. Но вы всегда должны думать о том, является ли .catch правильным выбором для удобства чтения. Он хорошо работает, если вы используете его для обработки исправимых ошибок.

0 голосов
/ 17 марта 2020

Я думаю, что вы ищете это

function f1(){
  return new Promise((res,rej)=>{
    rej(1)
  })
}

async function f2(){
  try {
    const response = await f1();
    // use the response from f1()
  } catch(err) {
    throw new Error(err);
  }
}

f2()

что-то вроде этого, так как async/await является оберткой для обещаний, которые позволяют вам писать синхронно выглядящий код. В противном случае вы бы смотрели на

function f2(){
  let response;
  f1().then(res => {
    response = res
  })
  .catch(err => {
    throw Error(err)
  });
}
...