当前位置: 首页 > 知识库问答 >
问题:

抽象api调用并尝试将catch块转换为JavaScript中的一个常用方法,以使其更具可重用性

江展
2023-03-14
export const getDatilsCall = async (testId) => {
  try {
    const resp = await axiosInstance.get(
      getUrl(DETAILS, { urlParams: { testId } })
    );
    return resp.data;
  } catch (err) {
    throw handleExceptions(err);
  }
};

export const getDefaultCall = async (productId) => {
  try {
    const resp = await axiosInstance.get(
      getUrl(DEFAULT, { queryParams: { productId } })
    );
    return resp.data;
  } catch (err) {
    throw handleExceptions(err);
  }
};

假设有一个包含上述方法的api.js文件,“getUrl”和“handleExceptions”已经被抽象出来,我可以直接使用它们。但是似乎对于每个api调用,我们都需要重复的试抓块包括“等待axiosInstance.get”“返回resp.data”等...

你们认为我们是否需要为上述方法提取try-catch块,或者用当前的方法就足够了。谢谢

根据评论更新我的问题。我删除try/catch并在顶层使用try/catch怎么样?但如何处理错误部分?我需要在顶层抛出handleExceptions(err)吗?

    export const getDefaultCall = async (productId) => {
      
        const resp = await axiosInstance.get(
          getUrl(DEFAULT, { queryParams: { productId } })
        );
        return resp.data;
     
    };

共有1个答案

咸正平
2023-03-14

我查看了你更新的帖子,我认为有两种选择

  1. 如果您想管理特定的错误,关于调用axios或函数中的其他代码,您可以在函数getDefaultCall中尝试捕获,例如:
 export const getDefaultCall = async (productId) => {
  try {

    const resp = await axiosInstance.get(
      getUrl(DEFAULT, { queryParams: { productId } })
    );

    // await anythings

    // await anythings

    return resp.data;
  } catch (err) {
    // manage special error, like custom message, or response structure json for other error manager
  }
};

但是

export const getDefaultCall = async (productId) => {
  const resp = await axiosInstance.get(
    getUrl(DEFAULT, { queryParams: { productId } })
  );
  return resp.data;
};

// use

something() {
  try {
    // if getDefault Call fail, jump auto to catch
    const data = await getDefaultCall();

  } catch (err) {
    
  }
}
 类似资料:
  • 本文向大家介绍C#嵌套异常并尝试catch块。,包括了C#嵌套异常并尝试catch块。的使用技巧和注意事项,需要的朋友参考一下 示例 一个能够在另一个try catch内部嵌套一个异常/块。 这样一来,您可以管理小的代码块,这些代码块可以在不破坏整个机制的情况下正常工作。 注意:抛出父catch块时,避免吞咽异常

  • 问题内容: 程序将返回3,而我的预期值为0。为什么方法f中的第一个强制转换什么都不做,而第二个有效?是因为在A和B类中,met方法被重载,因此使用静态绑定吗? 问题答案: 这就是多态性的工作方式。请考虑以下示例: 如预期的那样,将调用正确的方法。对象的方法表不仅仅因为更改存储在其中的变量的类型而改变,因为an 和它的方法之间的绑定比存储类型和与其相关的方法之间的绑定更强大。第二种类型起作用,因为输

  • 问题内容: Java具有允许Java调用javascript的脚本管理器,如下所示: 我的问题是,如果我有sayHi()函数,是否可以通过脚本引擎使用javascript来调用Java函数?谢谢。 问题答案: 从JavaDocs迅速被黑客入侵。 输出量

  • 这似乎是一个基本问题。但在采访前需要澄清。 我在抽象类中有一个非抽象方法。它的具体类重写了该方法。但我想调用父类的原始方法来调用,而不是重写方法。有什么办法吗? 据我所知,没有办法调用原始方法?

  • 问题内容: 您将如何从XML转换为JSON,然后再转换回XML? 以下工具可以很好地工作,但并不完全一致: xml2json 有人遇到过这种情况吗? 问题答案: 我认为这是最好的方法: 在XML和JSON之间转换 一定要阅读xml.com O’Reilly网站上的随附文章,该文章详细介绍了这些转换所带来的问题,我认为您会发现这很有启发性。O’Reilly托管该文章的事实应表明,Stefan的解决方

  • 问题内容: 如何在C ++中创建一个抽象类,该抽象类具有一些我想在子类中重写的抽象方法?该文件应如何显示?是否有一个,如果是的话,应该看起来如何? 在Java中,它看起来像这样: 对于我来说,将此代码转换为C ++就足够了。 编辑: 我创建了代码,但是当我尝试遍历对象时,出现以下错误: 使用此代码: 问题答案: 在Java中,除非您声明了所有方法,否则默认情况下所有方法都是默认方法。在C ++中,