如何用异步处理逻辑错误?

时间:2016-10-18 12:59:23

标签: javascript async-await

因为我在工作中使用async。我将发送一个ajax请求,然后接收。

我会这样写。

const API = {
  init() {
    this.initIndexData();
  },

  async initIndexData() {
    try {
      let data = await this.getData();
    } catch (e) {
      console.log(e);
    }
  },

  getData() {
    new Promise((resolve, reject) => {
      $.ajax({
        url: 'xx.json',
        success(res) {
          if (res.success) {
            resolve(res);
          } else {
            reject(res);
          }
        }
      })
    });
  }
}

API.init();

因为我不喜欢try..catch的代码。是否有任何解决方案可以在不使用reject的情况下处理try catch

我认为无论何时发生,我都可以随时使用reolve。像这样。

if (res.success) {
  resolve(res);
} else {
  reject(res);
}
...

let data = await this.getData();
if (data.success) {
  // do sth success logic
} else {
  // do sth error logic 
}

以上是处理reject而没有try catch的解决方案,但此代码不具有语义。

1 个答案:

答案 0 :(得分:0)

您可以使用普通.catch method承诺:

async initIndexData() {
  let data = await this.getData().catch(e => {
    console.log(e);
  });
},
async getData() {
  const res = await $.ajax({
//            ^^^^^ much better than `new Promise`
//                  as it does not ignore the ajax error handler
        url: 'xx.json',
  });
  if (res.success) {
    return res;
  } else {
    throw res;
  }
}