Async / Await JS Catch не работает в try / catch

У меня есть немного JavaScript ниже. Использование async / await в нашем проекте ES6. Я заметил, что теперь внезапно код ответа 404 не попадает в ловушку. Фактически .json () также выдает ошибку консоли, но все еще не попадает в ловушку. Я бы ожидал, что любая ошибка при попытке немедленно выбросить и перейти к блоку catch кода.

async getDash(projectId, projectUserId) {
  try {
    const events = (await this.apiHttp
      .fetch(`${projectId}/users/${projectUserId}/participant-event-dash`)).json();
    return events;
  } catch (e) {
    // fail back to local (dev testing)
    return (await this.http
      .fetch(`${this.appConfig.url}dist/api/query/json/partic-event-dash.json`)).json();
  }
}

person allencoded    schedule 28.09.2016    source источник
comment
К вашему сведению, async/await не является частью ES6. Это (скорее всего) будет частью спецификации, выпущенной в следующем году.   -  person Felix Kling    schedule 28.09.2016


Ответы (1)


Если метод json() асинхронный, следует добавить еще один await:

async getDash(projectId, projectUserId) {
  try {
    const events = await (await this.apiHttp
      .fetch(`${projectId}/users/${projectUserId}/participant-event-dash`)).json();
    return events;
  } catch (e) {
    // fail back to local (dev testing)
    return await (await this.http
      .fetch(`${this.appConfig.url}dist/api/query/json/partic-event-dash.json`)).json();
  }
}
person Michał Perłakowski    schedule 28.09.2016