Javascript退出功能,并从另一个功能返回

时间:2018-07-11 11:44:37

标签: javascript function return

更好的理解是通过代码。假设我具有以下功能:

const firstFct = function() {
    if(!valid) {
        return 'error...';
    }

    return ...
}

我想使用第二个功能退出 firstFct 。而不是使用 if

const secondFct = function(value, msg) {
    if(!value) {
        return msg;
    }
}

const firstFct = function() {
    secondFct(valid, "error"); // this should exit **firstFct** only if !value

    return ...
}

不确定是否可以通过返回来实现这一目标。

3 个答案:

答案 0 :(得分:0)

您需要包装第一个调用的结果,以将结果与错误区分开来,以便提早退出。

const firstFct = function() {
    if (!valid) {
        return { error: 'error...' };
    }
    return ...
}

const firstFct = function() {
    var temp = secondFct(valid, "error");

    if (temp && typeof temp === 'object' && 'error' in temp) {
        return temp.error;
    }
    return ...
}

或者使用exception handling并抛出错误。

答案 1 :(得分:0)

IMO,您需要在两种不同的逻辑之间进行区分:

  • 决定 if 进行AKA数据验证
  • 决定做什么进行AKA应用流程

换句话说:不要让secondFct也确定它是否有效,并且抛出错误消息。

考虑一下:

const isValid = function(data) {
  //some checks...
  return flag; // true OR false
}

const app = function() {
  // ...
  if (isValid(data)) {
    // handle error
    return 'error ...'
  }

  return ...

答案 2 :(得分:0)

这里有一个可能的解决方案。尽管我不建议这样做。

(我推荐Nina Scholz版本)

function myFunction() {myFunction:{
    console.log('i get executed');
    break myFunction;
    console.log('i do not get executed');
}}

现在有了这个原理,您可以:

const firstFct = function() {myScope: {
    secondFct(valid, "error") ? break myScope: null;
}};

现在,如果您返回真实值,则会暂停执行,否则继续执行。 我知道这不是您想要的100%,但是它已经足够好了。

或者,您可以引发错误,这将暂停JavaScript执行。 我也不建议这样做。

通常,对于更复杂的示例,我们也许可以为您提供更好的帮助。 您的问题可能还有另一种解决方案。