используя асинхронное ожидание и затем вместе - PullRequest
2 голосов
/ 06 марта 2019

Есть ли вред при использовании вместе async/await и .then().catch(), таких как:

async apiCall(params) {
    var results = await this.anotherCall()
      .then(results => {
        //do any results transformations
        return results;
      })
      .catch(error => {
        //handle any errors here
      });
    return results;
  }

Ответы [ 3 ]

2 голосов
/ 06 марта 2019

Асинхронная функция может содержать выражение await, которое приостанавливает выполнение асинхронной функции и ожидает разрешения переданного Promise, а затем возобновляет выполнение асинхронной функции и возвращает разрешенное значение.

Как видно из приведенного ниже примера, вы можете использовать два способа обработки результата ожидания и ошибок. Ключевое слово await заставляет JavaScript ждать, пока это обещание выполнится и вернет свой результат. Таким образом, никакого вреда нет (я не полностьюпонять, что вы называете здесь вредом).

function returnpromise(val) {
  return new Promise((resolve, reject) => {
    if (val > 5) {
      resolve("resolved"); // fulfilled
    }
    else {
      reject("rejected"); // rejected
    }
  });
}

//This is how you handle errors in await
async function apicall() {
  try {
    console.log(await returnpromise(5))
  }

  catch (error) {
    console.log(error)
  }
}

async function apicall2() {
  await returnpromise(8).then((re) => {
    console.log(re)
  }).catch((error) => {
    console.log(error)
  })
}

apicall2();
apicall();
Для дальнейшего ознакомления взгляните на MDN DOCS
0 голосов
/ 06 марта 2019

Я всегда использую async/await и .catch() вместо использования async/await и try/catch для компактного кодирования.

async function main() {
  const result = await asyncTask().catch(error => console.error(error));
}
0 голосов
/ 06 марта 2019

Если вы используете Async / await, вам не нужно связывать .then(), просто сохраните полученный вами результат resolve() в переменной (response в примере), но если вы хотите обработать ошибки, которые у вас есть попробовать / поймать ваш код:

async function f() {

  try {
    let response = await fetch('http://no-such-url');
  } catch(err) {
    alert(err); // TypeError: failed to fetch
  }
}

в вашем обещании использовать:

throw new Error("oops!");

или

Promise.reject(new Error("Whoops!"));

...