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