除了在主函数调用return,还有什么办法能终止主函数继续向后执行?
发布于 2 年前 作者 cd-xulei 2560 次浏览 来自 问答
function main () {
   // other code 
  
   // 1. 目前的实现方式
   if(!validateSomethind()){
     return 
   }
  
  // 2. 期望的实现方式
  validateSomething()
  
  // other code
}

function validateSomething () {
   if("表达式"){ 
    return true
   }
   // 这里除了抛错能终止主函数像后执行,还有其他方式吗?
   return false
}

如上代码所示,类似的在业务开发中应该很常见。如果类似于validateSomething这样的方法在多处外部函数调用,多处外部函数还需要再写一次if判断。这种内外都是判断就感觉不那么好。大家对这种情况有其他见解吗?或者有什么更好的组织方式。

7 回复

可以考虑装饰器,虽然依然没有进入标准 类似

@ValidParam()
function main () {
// do some thing
}
function ValidParm(...parms: unknown[]) {
// validation
}

我也一直用的抛错,比较简单直接
楼上的没看懂……
朋友们有好方案记得 @ 我

async函数 可以返回Promise.reject(“error”), 应该比较简洁了

@daGaiGuanYu 在注解方法 ValidParm() 里面先执行验证逻辑,如果不符合就直接return,否则继续执行被注解的函数(比如 main)

@waitingsong 这个,,,,,不用注解,直接用 alidParam 方法,除了写法上更简洁还有别的优点吗

楼主主要想解决的问题应该是嵌套很多函数,立即停止,比如:

function a() {
  b()
}
function b() {
  c()
}
function c() {
  d(2)
}
function d(param) {
  if(typeof param != 'string')
    throw Error('type error')
}

@cd-xulei 是这个意思吗

@daGaiGuanYu

差不多。我那个意思就 a b c 直接或间接调用d 。 如果是d返回false。外部函数就不继续向后执行了。

目前看来只有在d函数内 抛错的方法。虽然看起来不是很好的感觉,然后外部函数静默处理这个错误。

process.exit() 能用吗?

回到顶部