Async / Await JS Catch在try / catch中不起作用

时间:2016-09-28 15:57:17

标签: javascript asynchronous async-await try-catch ecmascript-2017

我在下面有一些javascript。在我们的ES6项目中使用async / await。我注意到,现在突然有一个404响应代码没有碰到捕获。事实上.json()也抛出一个控制台错误,但仍然没有击中捕获。我希望try中的任何错误都能立即抛出并转到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();
  }
}

1 个答案:

答案 0 :(得分:2)

如果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(); } }

class UnableToStripEnd(Exception):
    """A Exception type to indicate that the suffix cannot be removed from the text."""

    @staticmethod
    def get_exception(text, suffix):
        return UnableToStripEnd("Could not find suffix ({0}) on text: {1}."
                                .format(suffix, text))


def strip_end(text, suffix):
    """Removes the end of a string. Otherwise fails."""
    if not text.endswith(suffix):
        raise UnableToStripEnd.get_exception(text, suffix)
    return text[:len(text)-len(suffix)]