Javascript 优化嵌套的if语句

Javascript 优化嵌套的if语句,javascript,Javascript,它们是模拟这种逻辑的更简单的方法吗 被调用的每个方法都返回True或False如果以下任何方法返回False,则调用this.displayError()方法 我想不出更简单的方法来模仿这种逻辑了,有什么想法吗 main: function(){ if(this.isWRNotProcessed()){ if(this.retriveWRMetaData()){ if(this.retrieveWRLines()){

它们是模拟这种逻辑的更简单的方法吗

被调用的每个方法都返回True或False如果以下任何方法返回False,则调用this.displayError()方法

我想不出更简单的方法来模仿这种逻辑了,有什么想法吗

     main: function(){
    if(this.isWRNotProcessed()){
        if(this.retriveWRMetaData()){
            if(this.retrieveWRLines()){
                this.getDistinctOrders();
                if(this.createNewPOs()){
                    this.approvePOs();
                } else{this.displayError();}
            } else{this.displayError();}
        } else{this.displayError();}    
    } else{this.displayError();}
      }
编辑:在调用此.createNewPOs()时添加了一个额外的else语句 很抱歉,谢谢你的回复,他们都很有帮助


Try-Catch语句是否也可以处理此逻辑而不是IFs?

这应该可以满足您的需要:

main: function () {
    if (this.isWRNotProcessed() && this.retriveWRMetaData() && this.retrieveWRLines()) {
        this.getDistinctOrders();
        if (this.createNewPOs()) {
            this.approvePOs();
        }
    } else {
        this.displayError();
    }
}
还是我遗漏了什么?除非
displayError
特定于故障,否则这应该适用于您的目的。

可能是:

if(this.isWRNotProcessed() && this.retriveWRMetaData() && this.retrieveWRLines() &&     this.getDistinctOrders() && this.createNewPOs()) {
     this.approvePOs();
} else {
     this.displayError();
}

可能它会变得更可读,如下所示:

main: function()
{
   var is_valid = 
      this.isWRNotProcessed() && this.retriveWRMetaData() && this.retrieveWRLines();

   if(!is_valid)
   {
      this.displayError();
      return;
   }

   this.getDistinctOrders();

   if(this.createNewPOs())
   {
      this.approvePOs();
   }    
}

为了简化可读性,我会再做一个方法。。。合乎逻辑的是,如果您在
this.isWRNotProcessed()&&this.retrievewrmetadata()&&this.retrieveWRLines()
true
时做了一些事情,那么应该有解释它到底意味着什么

 someCheck: function(){ // I don't know what exactly it does so call this way..
     return this.isWRNotProcessed() 
          && this.retriveWRMetaData()
          && this.retrieveWRLines();
 },

 main: function(){
     if(this.someCheck()){
            this.getDistinctOrders();
            if(this.createNewPOs()){
                this.approvePOs();
            }
     } else {
             this.displayError();
     }
 }

-1这是不等价的:调用
This.approvePOs
不依赖于
This.getDistinctOrders
,显然
This.createNewPOs
失败时不应调用.displayError。唯一的问题是,如果
This.createNewPOs()
的结果为假,您仍然会显示错误。我想您可以将
return
移到嵌套的
if()
之外。@patrickdw:调用很好,没有捕获嵌套关系。是的,我可以向下移动返回,只是在第一次传递时错过了它。@patrickdw感谢您指出这一点,我需要确保在该方法调用中处理false。@user632910:那么前面的解决方案可以接受吗?(在createNewPOs if语句中返回?)@user:如果你说如果
createNewPOs()
失败,你需要一个错误,那么@Brad应该将他的答案回滚到上一个。
 someCheck: function(){ // I don't know what exactly it does so call this way..
     return this.isWRNotProcessed() 
          && this.retriveWRMetaData()
          && this.retrieveWRLines();
 },

 main: function(){
     if(this.someCheck()){
            this.getDistinctOrders();
            if(this.createNewPOs()){
                this.approvePOs();
            }
     } else {
             this.displayError();
     }
 }