forked from ramda/ramda
/
otherwise.js
38 lines (35 loc) · 1.24 KB
/
otherwise.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import _curry2 from './internal/_curry2.js';
import _assertPromise from './internal/_assertPromise.js';
/**
* Returns the result of applying the onFailure function to the value inside
* a failed promise. This is useful for handling rejected promises
* inside function compositions.
*
* @func
* @memberOf R
* @since v0.26.0
* @category Function
* @sig (e -> b) -> (Promise e a) -> (Promise e b)
* @sig (e -> (Promise f b)) -> (Promise e a) -> (Promise f b)
* @param {Function} onFailure The function to apply. Can return a value or a promise of a value.
* @param {Promise} p
* @return {Promise} The result of calling `p.then(null, onFailure)`
* @see R.andThen
* @example
*
* const failedFetch = id => Promise.reject('bad ID');
* const useDefault = () => ({ firstName: 'Bob', lastName: 'Loblaw' });
*
* //recoverFromFailure :: String -> Promise ({ firstName, lastName })
* const recoverFromFailure = R.pipe(
* failedFetch,
* R.otherwise(useDefault),
* R.andThen(R.pick(['firstName', 'lastName'])),
* );
* recoverFromFailure(12345).then(console.log);
*/
var otherwise = _curry2(function otherwise(f, p) {
_assertPromise('otherwise', p);
return p.then(null, f);
});
export default otherwise;