Javascript 通过HTTP响应应用条件的最佳方式是什么;s错误码

Javascript 通过HTTP响应应用条件的最佳方式是什么;s错误码,javascript,jquery,ajax,performance,optimization,Javascript,Jquery,Ajax,Performance,Optimization,我有一个ajax调用,每当出现错误时,它都会向响应中添加属性errorCode。属性errorCode中的值根据各种用例确定。调用可以返回10个代码,即5010505030。。。。600 我们在页面中有两个div ...rest of the page <div id="unsupported"> <p>equipment is unsupported</p> </div> <div id="notFound"> &

我有一个ajax调用,每当出现错误时,它都会向响应中添加属性errorCode。属性errorCode中的值根据各种用例确定。调用可以返回10个代码,即5010505030。。。。600

我们在页面中有两个div

 ...rest of the page    
 <div id="unsupported">
 <p>equipment is unsupported</p>
 </div>
 <div id="notFound">
 <p>equipment could not be found</p>
 </div>
 ...rest of the page  

我知道这很简单,但我在想,一定有一种优化的方法,使用javascript/ES6/ES7特性编写更少的代码。寻找一种现成的方法来缩短代码。

这怎么样?如果需要添加新的错误处理程序,只需创建一个函数并将其添加到
errors
对象。如果有多个错误正在执行相同的操作(例如执行相同操作的
5010
5020
),这是很好的。我有两种方法

const error5010=()=>{
//隐藏背景();
//showUnsupported();
};
常量error5020=error5010;
常量错误5090=()=>{
//隐藏背景();
//showNotFound();
};
常量错误={
错误5010,
错误5020,
错误5090,
};
常量其他错误=()=>{
log('未知错误…');
};
const errorHandler=代码=>
错误类型['error'+代码]=='function'
? 错误['error'+代码]()
:otherError()
;
errorHandler(5010);
errorHandler(5090);

errorHandler(2000年)如果在这种情况下条件非常好,我不会对您的代码做太多更改,但是我会删除
if(error.errorCode==5010 | | error.errorCode==5020 | | error.errorCode==5090){
并移动
隐藏背景
,使代码看起来像这样:

function(error) {
  if (error.errorCode === 5010 || error.errorCode === 5020) {
    hideBackground();
    showUnsupported();
  } else if (error.errorCode === 5090) {
    hideBackground();
    showNotFound();
  } else {
    toast(error.message);
  }
}
如果您这样编写代码,问题会自动出现,如果每次调用
showUnsupported
/
showNotFound
时都必须调用
hideBackground
,如果是这种情况,则可能需要将其移到这些函数中

或者您可以编写这样的帮助程序:

function showError(callback) {
  hideBackground()
  callback()
}

function(error) {
  if (error.errorCode === 5010 || error.errorCode === 5020) {
    showError(showUnsupported)
  } else if (error.errorCode === 5090) {
    showError(showNotFound)
  } else {
    toast(error.message);
  }
}

更短/更少的代码并不一定意味着性能、可读性和/或可维护性更好。尽管如此,您可以编写类似于
[501050205090]的内容。包括(error.errorCode)
我觉得必须有一种方法来减少使用的if条件的数量。这就是我要寻找的。我认为这也会带来更好的性能。在性能方面,可能没有任何解决方案的性能会比您显示的代码更好。这种if条件很容易为编译器进行优化,现代JavaScript引擎在代码优化和即时编译方面做得非常好。你应该始终关注可读性和可维护性。除了t.niese的输入,你还可以使用一个if分支和它自己的函数。如果你的错误代码与数组匹配,调用该函数。添加一个标志以确定ose函数已被调用。如果没有,请吐司消息。@t.niese这是有意义的。非常感谢(y)为什么要编写
const error5010=()=>{
而不是
function error5010(){
?您的代码似乎没有执行
中提到的任何操作,现在我想用以下方法处理错误
部分。@t.niese writing
const…=()=>
只是我的习惯。我正在演示我们可以用这种方式处理错误。我现在正在编辑它。所以,你现在没有了多个if/else if/else分支,而是有了多个函数?OP有10个错误代码。这意味着你必须编写10个函数…@KarelG我添加了另一种方法。@KarelG怎么样?嗯,你已经向你提出了建议se
.includes
方法,但您不使用它?这似乎不太容易维护。IMHO。@KarelG我没有建议使用
.includes
我只是说它可以使用。@KarelG关于可维护性。它删除了外部的
if
以便您只有一个
if else
链,更易于阅读和理解。您不需要在两个位置维护错误代码。很明显,
toast
是一个回退错误处理程序。使用
[50105020]。包括(error.errorCode)
是可以做到的,但这是个人偏好的问题。是的,但是如果经理或客户说在给出
5010
时背景不必隐藏,但其他规则保持不变,那该怎么办呢。@KarelG然后是类似
displayErrorAsDialog(buildUnsupportedError,{hideBackground:true})的东西
displayErrorAsNotification(buildUnsupporterRor,{sticky:true})
仍然是一个更好的选择,如果
,那么外部的
if
。或者可能:
displayErrorAsDialog(buildUnsupporterRor,{hideBackground:errorsWithBackground.includes(error.errorCode)})
function showError(callback) {
  hideBackground()
  callback()
}

function(error) {
  if (error.errorCode === 5010 || error.errorCode === 5020) {
    showError(showUnsupported)
  } else if (error.errorCode === 5090) {
    showError(showNotFound)
  } else {
    toast(error.message);
  }
}