import { call } from 'redux-saga/effects'; import { Observable, Observer, Subscription } from '../../types/external/Observable'; export default function observeOnceEffect(observable: Observable) { return call(function* observeOnce() { let subscription: Subscription; try { return yield call( () => new Promise((resolve, reject) => { subscription = observable.subscribe({ complete: resolve, error: reject, next: resolve } as Observer); }) ); } finally { subscription && subscription.unsubscribe(); } }); }