Revert additional catch (#2679)

* Revert additional catch

* Cleanup immediate/timeout checks
This commit is contained in:
Jaco Greeff
2020-10-04 19:43:15 +02:00
committed by GitHub
parent 4dbcf310f3
commit d3703c072b
+8 -32
View File
@@ -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);
});
});
}