[d24f17c] | 1 | import { curry, propOr, partial, nth } from 'ramda';
|
---|
| 2 | import isNonNegative from './isNonNegative';
|
---|
| 3 | import isInteger from './isInteger';
|
---|
| 4 |
|
---|
| 5 | /**
|
---|
| 6 | * Creates a promise which resolves/rejects after the specified milliseconds.
|
---|
| 7 | *
|
---|
| 8 | * @func delayP
|
---|
| 9 | * @memberOf RA
|
---|
| 10 | * @category Function
|
---|
| 11 | * @sig Number -> Promise Undefined
|
---|
| 12 | * @sig {timeout: Number, value: a} -> Promise a
|
---|
| 13 | * @param {number|Object} milliseconds number of milliseconds or options object
|
---|
| 14 | * @return {Promise} A Promise that is resolved/rejected with the given value (if provided) after the specified delay
|
---|
| 15 | * @example
|
---|
| 16 | *
|
---|
| 17 | * RA.delayP(200); //=> Promise(undefined)
|
---|
| 18 | * RA.delayP({ timeout: 1000, value: 'hello world' }); //=> Promise('hello world')
|
---|
| 19 | * RA.delayP.reject(100); //=> Promise(undefined)
|
---|
| 20 | * RA.delayP.reject({ timeout: 100, value: new Error('error') }); //=> Promise(Error('error'))
|
---|
| 21 | */
|
---|
| 22 |
|
---|
| 23 | var makeDelay = curry(function (settleFnPicker, opts) {
|
---|
| 24 | var timeout;
|
---|
| 25 | var value;
|
---|
| 26 | if (isInteger(opts) && isNonNegative(opts)) {
|
---|
| 27 | timeout = opts;
|
---|
| 28 | } else {
|
---|
| 29 | timeout = propOr(0, 'timeout', opts);
|
---|
| 30 | value = propOr(value, 'value', opts);
|
---|
| 31 | }
|
---|
| 32 | return new Promise(function () {
|
---|
| 33 | for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
---|
| 34 | args[_key] = arguments[_key];
|
---|
| 35 | }
|
---|
| 36 | var settleFn = settleFnPicker(args);
|
---|
| 37 | setTimeout(partial(settleFn, [value]), timeout);
|
---|
| 38 | });
|
---|
| 39 | });
|
---|
| 40 | var delayP = makeDelay(nth(0));
|
---|
| 41 | delayP.reject = makeDelay(nth(1));
|
---|
| 42 | export default delayP; |
---|