source: node_modules/ramda-adjunct/lib/async.js

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 1.9 KB
Line 
1"use strict";
2
3exports.__esModule = true;
4exports["default"] = void 0;
5var _ramda = require("ramda");
6var _resolveP = _interopRequireDefault(require("./resolveP"));
7var _rejectP = _interopRequireDefault(require("./rejectP"));
8function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
9/**
10 * Takes a generator function and returns an async function.
11 * The async function returned is a curried function whose arity matches that of the generator function.
12 *
13 * Note: This function is handy for environments that does support generators but doesn't support async/await.
14 *
15 * @func async
16 * @memberOf RA
17 * @since {@link https://char0n.github.io/ramda-adjunct/2.16.0|v2.16.0}
18 * @category Function
19 * @sig Promise c => (a, b, ...) -> a -> b -> ... -> c
20 * @param {Function} generatorFn The generator function
21 * @return {Function} Curried async function
22 * @see {@link https://www.promisejs.org/generators/}
23 * @example
24 *
25 * const asyncFn = RA.async(function* generator(val1, val2) {
26 * const a = yield Promise.resolve(val1);
27 * const b = yield Promise.resolve(val2);
28 *
29 * return a + b;
30 * });
31 *
32 * asyncFn(1, 2); //=> Promise(3)
33 *
34 */
35var async = (0, _ramda.curryN)(1, function (generatorFn) {
36 function asyncWrapper() {
37 var iterator = (0, _ramda.bind)(generatorFn, this).apply(void 0, arguments);
38 var handle = function handle(result) {
39 var resolved = (0, _resolveP["default"])(result.value);
40 return result.done ? resolved : resolved.then(function (value) {
41 return handle(iterator.next(value));
42 }, function (error) {
43 return handle(iterator["throw"](error));
44 });
45 };
46 try {
47 return handle(iterator.next());
48 } catch (error) {
49 return (0, _rejectP["default"])(error);
50 }
51 }
52 if (generatorFn.length > 0) {
53 return (0, _ramda.curryN)(generatorFn.length, asyncWrapper);
54 }
55 return asyncWrapper;
56});
57var _default = async;
58exports["default"] = _default;
Note: See TracBrowser for help on using the repository browser.