Javascript 在XHR请求中使用try/catch而不是“.catch”可观察运算符是否会降低性能?

Javascript 在XHR请求中使用try/catch而不是“.catch”可观察运算符是否会降低性能?,javascript,ajax,angular,typescript,Javascript,Ajax,Angular,Typescript,我有一个假设性的问题,嗯,有点-我被要求加入一个新项目,我正在查看代码。这是在Angular项目中常见的一种情况,但是在服务文件中,所有HTTP请求都封装在JavaScripttry/catch中,而不是使用.catch可观察操作符来处理错误。我以前从未见过这种情况,建议使用内置的.catch可观察操作符。下面是我发现的代码示例(注意,语言是TypeScript) 公共getSomething(id:string):可观察{ 试一试{ 返回此.http.get('someurl/somepara

我有一个假设性的问题,嗯,有点-我被要求加入一个新项目,我正在查看代码。这是在Angular项目中常见的一种情况,但是在服务文件中,所有HTTP请求都封装在JavaScript
try/catch
中,而不是使用
.catch
可观察操作符来处理错误。我以前从未见过这种情况,建议使用内置的
.catch
可观察操作符。下面是我发现的代码示例(注意,语言是TypeScript)

公共getSomething(id:string):可观察{ 试一试{ 返回此.http.get('someurl/someparam') .map((res)=>res.json().data); }捕获(e){ 抛出新错误('getSomething()出错'); } } 我的建议遇到了阻力,我被告知这对性能(内存和网络)没有任何影响。如果是这样的话,我就认为try/catch没有从HTTP请求返回真正的错误。因此,我的问题是,尽管这被认为是一种反模式(或不是),但围绕
http.get
包装
try/catch
是否会降低性能?我还假设
try/catch
与同步而非异步代码一起使用,这也是我的一个假设

如果这是一个不好的非特定问题,就这么说,我将删除。但我想听听其他开发者对此的看法

我被告知这对性能(内存和网络)没有任何影响

也许是这样,但这根本不重要

更改将对正确性产生重大影响:
try
/
catch
处理同步异常,而
.catch()
处理可观察到的错误,包括异步错误

我被告知这对性能(内存和网络)没有任何影响

也许是这样,但这根本不重要


更改将对正确性产生重大影响:
try
/
catch
处理同步异常,而
.catch()处理同步异常
处理可观察到的错误(包括异步错误)。

catch对实际的XHR调用没有任何作用。我认为性能不会受到影响,因为JavaScript语言只有
try
/
catch
。任何其他
catch
模式都只是本地模式的包装器。然而,我建议重新评估使用
try
/
catch
是否真的值得。HTTP响应将伴随一个响应代码,而不一定是错误。正如@epascarello所说,它不会做任何事情,如果错误从url返回,它将被忽略,它将只捕获HTTP.get在get请求发生错误时抛出的情况,而不会在那里抛出(或者至少我认为也没有看到它抛出)这就是可观察的捕获的原因。
try
/
catch
只会吸收
this.http.get
方法的即时和同步部分抛出的错误;e、 它可能会吸收
this.http.get('not!a!valid!url!')引发的“InvalidUrlFormat”错误,但它肯定不会允许处理API错误(例如400个响应)。使用带有承诺的
try
/
catch
是无效的,我认为您的团队应该听取您的意见。该catch对实际的XHR调用没有任何作用。我认为性能不会受到影响,因为JavaScript语言只有
try
/
catch
。任何其他
catch
模式都只是本地模式的包装器。然而,我建议重新评估使用
try
/
catch
是否真的值得。HTTP响应将伴随一个响应代码,而不一定是错误。正如@epascarello所说,它不会做任何事情,如果错误从url返回,它将被忽略,它将只捕获HTTP.get在get请求发生错误时抛出的情况,而不会在那里抛出(或者至少我认为也没有看到它抛出)这就是可观察的捕获的原因。
try
/
catch
只会吸收
this.http.get
方法的即时和同步部分抛出的错误;e、 它可能会吸收
this.http.get('not!a!valid!url!')引发的“InvalidUrlFormat”错误,但它肯定不会允许处理API错误(例如400个响应)。使用带有承诺的
try
/
catch
是无效的,我认为您的团队应该听取您的意见。
public getSomething(id: string): Observable<any> {
    try {
      return this.http.get('someurl/someparam')
        .map((res) => res.json().data);
    } catch (e) {
      throw new Error('Error with getSomething()');
    }
  }