Links an output transfer (LHS) to an input transfer (RHS).
Delegates to DefaultLinkStrategy.link. The strategy is determined
by capability flags. Sync operations take priority: if both transfers
support sync linking, it is used. Async strategies are applied only when
sync is not applicable.
Sync strategies:
subscribable → pushable: reactive subscription
pullable → pollingProxy: active polling via setFetcher
pullable/asyncPullable → pushable/asyncPushable: needs a Bridge/Triggerable
Rejection handling for subscribable → asyncPushable:
.catch() is always called. If options.onError is provided, it is invoked
via handleError() and the rejection is suppressed.
Without onError, handleError() rethrows — resulting in an unhandled promise
rejection (the source's subscription remains active).
Ordering for subscribable → asyncPushable:
No ordering guarantees — fast sync notifications from LHS can overtake
pending asyncPush calls. A serializer is a separate task (not in this queue).
Links an output transfer (LHS) to an input transfer (RHS).
Delegates to DefaultLinkStrategy.link. The strategy is determined by capability flags. Sync operations take priority: if both transfers support sync linking, it is used. Async strategies are applied only when sync is not applicable.
Sync strategies:
Async strategies:
Errors:
Rejection handling for subscribable → asyncPushable: .catch() is always called. If options.onError is provided, it is invoked via handleError() and the rejection is suppressed. Without onError, handleError() rethrows — resulting in an unhandled promise rejection (the source's subscription remains active).
Ordering for subscribable → asyncPushable: No ordering guarantees — fast sync notifications from LHS can overtake pending asyncPush calls. A serializer is a separate task (not in this queue).