The goal of whatIf is to write readable, self explanatory code by writing code using plain English inside conditional statements.
whatIf reduces promises and functions until it gets a values.
If the result is true it will execute the .then
's associated to the statement,
if not it will continue to the .butWhatIf
statements until it finds a matching,
if not it will run the .otherwise
statement.
The basics:
whatIf(theUserLogins)
.then(redirectTheUserToTheDashboard)
.otherwise(displayAnErrorMessage);
You can pass logical operators:
whatIf(theThemeColor === 'red')
.then(displayTheRedDashboard)
.butWhatIf(theThemeColor === 'blue')
.then(displayTheBlueDashboard)
.otherwise(displayTheGreenDashboard);
Or even promises:
whatIf(weFetchTheDashboardData())
.then(displayTheDashboardData)
.otherwise(displayAnErrorMessage);
Warning: these may change in the near future. Not ready for production.
WhatIf can accept:
- Boolean values
whatIf(fruit === 'apple')
. - Function references
whatIf(canEatFruits)
. - Promises
whatIf(Promises.resolve(true))
.
Note: Promises that return an error will be treated as falsy values.
It is recommended to handle errors before passing the promise to whatIf
or
.butWhatIf
.
WhatIf can have multiple conditions in a if, if-else fashion:
whatIf(falseStatement)
.then(thisWillNotExecute)
.butWhatIf(truthfulStatement)
.then(thisWillExecute);
What if can have a default statement, like an else:
whatIf(falseStatement)
.then(thisWillNotExecute)
.butWhatIf(anotherFalseStatement)
.then(thisWillNotExecuteEither)
.otherwise(thisWillExecute);
Can use .and
instead of .then
whatIf(userIsAdmin)
.then(displayAdminMenu)
.and(displayAdminReport);
Can catch errors that happen inside .then
and ..and
statements:
whatIf(theUserHasLoggedIn)
.then(tryToRedirectThemToTheirDashboard)
.catch(tryToHandleTheRedirectionError);
But will treat errors thrown inside whatIf
and .butWhatIf
statements as
falsy values:
whatIf(thisThrowsAnError)
.then(thisWillNotExecute)
.catch(thisWillNotExecuteEither)
.otherwise(thisWillExecute);