@@ -11,30 +11,34 @@ async function* _compute<T extends ComputableFactory<any>[], U extends Normalize
11
11
messages : AsyncIterableIterator < U > ,
12
12
...computables : T
13
13
) : AsyncIterableIterator < T extends ComputableFactory < infer Z > [ ] ? ( U extends Disconnect ? U | Z | Disconnect : U | Z ) : never > {
14
- const factory = new Computables ( computables )
14
+ try {
15
+ const factory = new Computables ( computables )
15
16
16
- for await ( const message of messages ) {
17
- // always pass through source message
18
- yield message as any
17
+ for await ( const message of messages ) {
18
+ // always pass through source message
19
+ yield message as any
19
20
20
- if ( message . type === 'disconnect' ) {
21
- // reset all computables for given exchange if we've received disconnect for it
22
- factory . reset ( message . exchange )
23
- continue
24
- }
21
+ if ( message . type === 'disconnect' ) {
22
+ // reset all computables for given exchange if we've received disconnect for it
23
+ factory . reset ( message . exchange )
24
+ continue
25
+ }
25
26
26
- const normalizedMessage = message as NormalizedData
27
- const id = normalizedMessage . name !== undefined ? `${ normalizedMessage . symbol } :${ normalizedMessage . name } ` : normalizedMessage . symbol
27
+ const normalizedMessage = message as NormalizedData
28
+ const id = normalizedMessage . name !== undefined ? `${ normalizedMessage . symbol } :${ normalizedMessage . name } ` : normalizedMessage . symbol
28
29
29
- const computablesMap = factory . getOrCreate ( normalizedMessage . exchange , id )
30
- const computables = computablesMap [ normalizedMessage . type ]
31
- if ( ! computables ) continue
30
+ const computablesMap = factory . getOrCreate ( normalizedMessage . exchange , id )
31
+ const computables = computablesMap [ normalizedMessage . type ]
32
+ if ( ! computables ) continue
32
33
33
- for ( const computable of computables ) {
34
- for ( const computedMessage of computable . compute ( normalizedMessage ) ) {
35
- yield computedMessage
34
+ for ( const computable of computables ) {
35
+ for ( const computedMessage of computable . compute ( normalizedMessage ) ) {
36
+ yield computedMessage
37
+ }
36
38
}
37
39
}
40
+ } finally {
41
+ messages . return ! ( )
38
42
}
39
43
}
40
44
0 commit comments