@lifaon/rx-js-light
Version:
Blazing fast Observables
36 lines (35 loc) • 1.13 kB
JavaScript
import {STATIC_COMPLETE_NOTIFICATION} from "../../../../../../../misc/notifications/built-in/complete/complete-notification.constant.mjs";
import {createErrorNotification} from "../../../../../../../misc/notifications/built-in/error/create-error-notification.mjs";
import {createNextNotification} from "../../../../../../../misc/notifications/built-in/next/create-next-notification.mjs";
export function fromAsyncIterator(asyncIterator) {
return emit => {
let running = true;
(async () => {
while (running) {
let result;
try {
result = await asyncIterator.next();
} catch (error) {
if (running) {
emit(createErrorNotification(error));
}
return;
}
if (running) {
if (result.done) {
emit(STATIC_COMPLETE_NOTIFICATION);
return;
} else {
emit(createNextNotification(result.value));
}
}
}
if (('return' in asyncIterator)) {
asyncIterator.return(void 0);
}
})();
return () => {
running = false;
};
};
}