Revert additional catch (#2679)
* Revert additional catch * Cleanup immediate/timeout checks
This commit is contained in:
@@ -63,28 +63,13 @@ function decorateCall<Method extends DecorateFn<ObsInnerType<ReturnType<Method>>
|
||||
// single result tracker - either reject with Error or resolve with Codec result
|
||||
const tracker = promiseTracker(resolve, reject);
|
||||
|
||||
// schedule an unsubscription
|
||||
const immediateUnsub = (subscription: Subscription): void => {
|
||||
typeof setImmediate === 'undefined'
|
||||
? setTimeout(() => subscription.unsubscribe(), 0)
|
||||
: setImmediate(() => subscription.unsubscribe());
|
||||
};
|
||||
|
||||
// encoding errors reject immediately, any result unsubscribes and resolves
|
||||
const subscription: Subscription = method(...actualArgs).pipe(
|
||||
catchError((error) => tracker.reject(error))
|
||||
).subscribe(
|
||||
// resolve with the result
|
||||
(result): void => {
|
||||
tracker.resolve(result);
|
||||
immediateUnsub(subscription);
|
||||
},
|
||||
// ensure that all processing errors result in a rejection
|
||||
(error): void => {
|
||||
tracker.reject(error);
|
||||
immediateUnsub(subscription);
|
||||
}
|
||||
);
|
||||
).subscribe((result): void => {
|
||||
tracker.resolve(result);
|
||||
setTimeout(() => subscription.unsubscribe(), 0);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -98,19 +83,10 @@ function decorateSubscribe<Method extends DecorateFn<ObsInnerType<ReturnType<Met
|
||||
const subscription: Subscription = method(...actualArgs).pipe(
|
||||
catchError((error) => tracker.reject(error)),
|
||||
tap(() => tracker.resolve(() => subscription.unsubscribe()))
|
||||
).subscribe(
|
||||
(result): void => {
|
||||
// We use setImmediate here to ensure that the Promise above (tracker) has resolved, before returning
|
||||
// the first result. By putting is back in the queue, the promise above is guarded for first execution
|
||||
typeof setImmediate === 'undefined'
|
||||
? setTimeout(() => resultCb(result) as void, 0)
|
||||
: setImmediate(() => resultCb(result) as void);
|
||||
},
|
||||
// for subscriptions (as of now), don't bubble
|
||||
(): void => {
|
||||
// noop
|
||||
}
|
||||
);
|
||||
).subscribe((result): void => {
|
||||
// queue result (back of queue to clear current)
|
||||
setTimeout(() => resultCb(result) as void, 0);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user