如何在异步等待中使用.catch?

时间:2019-08-05 04:50:54

标签: javascript ecmascript-6 async-await

我有一个像这样的承诺。

const updateTheme = async rawTheme => {
  try {
    const existData = await Theme.findOne({ themename: rawTheme.themename });
    if (!existData) {
      return Promise.reject(Error(`Theme ${rawTheme.themename} not found.`));
    }
    Object.assign(existData, rawTheme);
    const result = await existData.save();
    return result;
  } catch (err) {
    return Promise.reject(err);
  }
};

此函数更新mongoDB中的主题,如果找不到任何主题,则返回Promise.reject

我想创建一个使用updateTheme的函数。如果找不到主题,则会创建一个新主题。功能就是这样。

const updateTheme = async dbdata=> {
  try {
    let data = await dbServices.updateTheme(dbdata);
    return Promise.resolve(data);
    // Modify this function to catch an error from updateTheme and create a new theme
  } catch (error) {
    return Promise.reject(error);
  }
}

我想要这样的东西吗?

await dbServices.updateTheme(dbdata)
  .then(
    // resolve logic
  ).catch(
    // check reject error and write create new theme logic
  )

但是,如果我们使用async-await,则任何错误将直接进入try...catch块中。所以我的问题是,如何在.then.catch块中捕获错误?

0 个答案:

没有答案