1 | import { AsyncSink } from './asyncsink';
|
2 | import { memoize } from './operators/memoize';
|
3 | export function asyncify(func) {
|
4 | return function (...args) {
|
5 | const sink = new AsyncSink();
|
6 | const handler = function (...innerArgs) {
|
7 | sink.write(innerArgs.length === 1 ? innerArgs[0] : innerArgs);
|
8 | sink.end();
|
9 | };
|
10 | try {
|
11 | func(...args.concat(handler));
|
12 | }
|
13 | catch (e) {
|
14 | sink.error(e);
|
15 | sink.end();
|
16 | }
|
17 | const yielder = async function* () {
|
18 | for (let next; !(next = await sink.next()).done;) {
|
19 | yield next.value;
|
20 | }
|
21 | };
|
22 | return memoize()(yielder());
|
23 | };
|
24 | }
|
25 |
|
26 |
|