UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

69 lines (68 loc) 2.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.forkJoin = void 0; var async_unsubscribe_1 = require("../../../../../../misc/helpers/async-unsubscribe.cjs"); var complete_notification_constant_1 = require("../../../../../../misc/notifications/built-in/complete/complete-notification.constant.cjs"); var create_next_notification_1 = require("../../../../../../misc/notifications/built-in/next/create-next-notification.cjs"); var single_with_notifications_1 = require("../../values/single/single-with-notifications.cjs"); function forkJoin(observables) { var length = observables.length; if (length === 0) { return (0, single_with_notifications_1.singleWithNotifications)([]); } else { return function (emit) { var values = Array.from({ length: length }); var complete = Array.from({ length: length }); var completeCount = 0; var running = true; var clear = function () { if (running) { running = false; for (var i = 0, l = unsubscribe.length; i < l; i++) { if (!complete[i]) { unsubscribe[i](); } } } }; var unsubscribe = observables.map(function (subscribe, index) { var unsubscribe = subscribe(function (notification) { switch (notification.name) { case 'next': values[index] = notification.value; break; case 'complete': (0, async_unsubscribe_1.asyncUnsubscribe)(function () { return unsubscribe; }); if (!complete[index]) { complete[index] = true; completeCount++; } if (completeCount === length) { emit((0, create_next_notification_1.createNextNotification)(values)); if (running) { emit(complete_notification_constant_1.STATIC_COMPLETE_NOTIFICATION); } clear(); } break; case 'error': emit(notification); clear(); break; } }); return unsubscribe; }); return clear; }; } } exports.forkJoin = forkJoin;