Apply a function to the wrapped value if Ok
and return a new Ok
containing the resulting value; or if it is Err
return it
unmodified.
This differs from map
in that thenFn
returns another Result
.
You can use andThen
to combine two functions which both create a Result
from an unwrapped type.
You may find the .then
method on an ES6 Promise
helpful for comparison: if
you have a Promise
, you can pass its then
method a callback which returns
another Promise
, and the result will not be a nested promise, but a single
Promise
. The difference is that Promise#then
unwraps all layers to only
ever return a single Promise
value, whereas Result.andThen
will not unwrap
nested Result
s.
This is is sometimes also known as bind
, but not aliased as such because
bind
already means something in JavaScript.
import { ok, err, andThen, toString } from 'true-myth/result';
const toLengthAsResult = (s: string) => ok(s.length);
const anOk = ok('just a string');
const lengthAsResult = andThen(toLengthAsResult, anOk);
console.log(toString(lengthAsResult)); // Ok(13)
const anErr = err(['srsly', 'whatever']);
const notLengthAsResult = andThen(toLengthAsResult, anErr);
console.log(toString(notLengthAsResult)); // Err(srsly,whatever)
Apply a function to the wrapped value if
Ok
and return a newOk
containing the resulting value; or if it isErr
return it unmodified.This differs from
map
in thatthenFn
returns anotherResult
. You can useandThen
to combine two functions which both create aResult
from an unwrapped type.You may find the
.then
method on an ES6Promise
helpful for comparison: if you have aPromise
, you can pass itsthen
method a callback which returns anotherPromise
, and the result will not be a nested promise, but a singlePromise
. The difference is thatPromise#then
unwraps all layers to only ever return a singlePromise
value, whereasResult.andThen
will not unwrap nestedResult
s.This is is sometimes also known as
bind
, but not aliased as such becausebind
already means something in JavaScript.Examples