Return boolean value through multiple functions

17,345

Solution 1

You may want to try the following (if I understood your question correctly):

function one(txt) {
   if(txt == 'foo') return two(txt);
   else return false;
}

function two(txt) {
   if(txt == 'foo') return three(txt);
   else return false;
}

function three(txt) {
   if(txt == 'foo') return true;
   else return false;
}

Solution 2

Change the calls to three() and two() to return three() and return two().

Share:
17,345

Related videos on Youtube

Ben Kulbertis
Author by

Ben Kulbertis

Updated on April 26, 2022

Comments

  • Ben Kulbertis
    Ben Kulbertis about 2 years

    I have some Javascript code that needs to end with either a true or false value being returned. However, when the true/false value is computed, the original value has passed through multiple functions, like so:

    var txt = 'foo'    
    function one(txt) {
    if(txt == 'foo') { two(txt); }
    }
    function two(txt) {
    if(txt == 'foo') { three(txt); }
    }
    function three(txt) {
    if(txt == 'foo') { return true; }
    else { return false; }
    }
    

    Obviously this example has little point but it gets the general point across. What I need to do to it is return the true (or false) value from function three() all the way back to function one(), and then have function one() return that value to whatever called it. I am assuming I have to go back through function two() to get back to one, is there a way I can do this with a variable? Just an idea. Thanks very much for any help!

    • Fabio Filippi
      Fabio Filippi
      Maybe I don't get the question but just write return two(txt); and return three(txt); won't work?
  • Daniel Vassallo
    Daniel Vassallo almost 14 years
    That would still return undefined if you pass something other than foo to the one() function.
  • tzaman
    tzaman almost 14 years
    one and two also need else cases, or they won't return anything when the condition is false.
  • Ibrahim Quraish
    Ibrahim Quraish almost 14 years
    You can coerce to boolean - return two( new Boolean(txt) ); or return two( !!txt ); - without needing the || false.
  • Daniel Vassallo
    Daniel Vassallo almost 14 years
    @Fabio: I removed the || false part. It isn't needed if all functions return either true or false.
  • junix
    junix about 11 years
    A few more words about why you suggest this code would be nice.
  • BarryBurns
    BarryBurns about 11 years
    I think it's best because it treats the boolean like any other type. It is also the simplest, needing no if's or else's. The boolean is created with the test in function 3, and passed up the stack.
  • Jack Viers
    Jack Viers over 10 years
    @BarryBurns is correct. This is an example of function composition. one txt === (two of three) txt. This is preferable to the boolean early exit examples because you can avoid using a conditional to return a boolean (this is redundant since a boolean condition evaluates to true or false, and it becomes easy to return a contradiction, which is confusing), and also allows the the creation of complex conditionals by composing more functions together.