15
15
16
16
// API object providing basic functions for handling effects and values
17
17
api = {
18
- // Placeholder for any observable value
19
18
any : undefined ,
20
19
// Executes the provided function
21
20
effect : ( f ) => f ( ) ,
@@ -39,17 +38,19 @@ const
39
38
) ,
40
39
41
40
sub = ( target , stop , unsub ) => ( next , error , complete ) => target && (
42
- unsub = api ?. any ?. ( target ) ?. ( next , error , complete ) ||
43
- unsubr ( ( target [ Symbol . observable ] ?. ( ) || target ) . subscribe ?. ( ( v ) => next ( get ( v ) ) , error , complete ) , complete ) ||
41
+ unsub = unsubr ( ( target [ Symbol . observable ] ?. ( ) || target ) . subscribe ?. ( ( v ) => next ( get ( v ) ) , error , complete ) , complete ) ||
44
42
( ( target . call || api . is ( target ) ) && api . effect ( ( ) => next ( get ( target ) ) ) ) ||
45
- ( target . then ?. ( v => ( ! stop && next ( get ( v ) ) , complete ?. ( ) ) , error ) ) ||
46
- ( async v => {
47
- try {
48
- for await ( v of target ) { if ( stop ) return ; next ( get ( v ) ) }
49
- complete ?. ( )
50
- } catch ( err ) { error ?. ( err ) }
51
- } ) ( )
52
- && ( _ => stop = 1 ) ,
43
+ (
44
+ target . then ?. ( v => ( ! stop && next ( get ( v ) ) , complete ?. ( ) ) , error ) ||
45
+ target [ Symbol . asyncIterator ] && ( async v => {
46
+ try {
47
+ // FIXME: possible drawback: it will catch error happened in next, not only in iterator
48
+ for await ( v of target ) { if ( stop ) return ; next ( get ( v ) ) }
49
+ complete ?. ( )
50
+ } catch ( err ) { error ?. ( err ) }
51
+ } ) ( )
52
+ ) && ( _ => stop = 1 ) ||
53
+ ( api ?. any ?. ( target ) ?. ( next , error , complete ) ) ,
53
54
// register autocleanup
54
55
registry . register ( target , unsub ) ,
55
56
unsub
0 commit comments