{"id":20155717,"url":"https://github.com/maybemonad/task-queue-for-rxjs","last_synced_at":"2026-06-04T22:31:02.647Z","repository":{"id":40605125,"uuid":"506915531","full_name":"MaybeMonad/task-queue-for-rxjs","owner":"MaybeMonad","description":"For async execution in nested Observables","archived":false,"fork":false,"pushed_at":"2022-06-30T11:48:07.000Z","size":53,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-03T01:44:02.163Z","etag":null,"topics":["rxjs"],"latest_commit_sha":null,"homepage":"https://codesandbox.io/s/task-queue-for-rxjs-g1prs6?file=/src/App.js","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MaybeMonad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-24T07:17:30.000Z","updated_at":"2023-03-07T15:28:30.000Z","dependencies_parsed_at":"2022-08-24T22:50:18.048Z","dependency_job_id":null,"html_url":"https://github.com/MaybeMonad/task-queue-for-rxjs","commit_stats":null,"previous_names":["maybemonad/task-queue-for-rxjs"],"tags_count":0,"template":false,"template_full_name":"MaybeMonad/vite-lib-starter","purl":"pkg:github/MaybeMonad/task-queue-for-rxjs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaybeMonad%2Ftask-queue-for-rxjs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaybeMonad%2Ftask-queue-for-rxjs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaybeMonad%2Ftask-queue-for-rxjs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaybeMonad%2Ftask-queue-for-rxjs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MaybeMonad","download_url":"https://codeload.github.com/MaybeMonad/task-queue-for-rxjs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaybeMonad%2Ftask-queue-for-rxjs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33923173,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rxjs"],"created_at":"2024-11-13T23:34:35.601Z","updated_at":"2026-06-04T22:31:02.616Z","avatar_url":"https://github.com/MaybeMonad.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Async Task Queue for RxJS\n\nCheckout: [Code Sandbox Example](https://codesandbox.io/s/task-queue-for-rxjs-g1prs6?file=/src/App.js)\n\n![Preview](https://github.com/captain-martin/task-queue-for-rxjs/blob/master/preview.png)\n\nYou can simply create an instance to get a new `Subject` with queued execution by applying `new TaskQueue()`, as well as wrap your exist `Subject`s with `TaskQueue` like `new TaskQueue(ob$)`.\n\n```ts\nconst ob$ = new Subject()\nconst subOb$ = new Subject()\n\nasync function asyncFunc() {\n  await new Promise((resolve) =\u003e setTimeout(resolve, Math.random(1) * 1000))\n}\n\n// Without [TaskQueue]\nob$.subscribe(x =\u003e {\n  subOb$.next(x)\n})\nsubOb$.current.pipe(switchMap(asyncFunc)).subscribe()  // \u003c- My main goal is to make sure the [asyncFunc] is executed asyncronously.\n\n// With [TaskQueue]\nconst taskQueue = new TaskQueue(subOb$)\nob$.subscribe(x =\u003e {\n  taskQueue.next(x)\n  // or\n  taskQueue.nextAsync(x)\n})\ntaskQueue.subscribe(asyncFunc)\n```\n\n## `TaskQueue`\n\n```ts\ninterface Option {\n  taskPacakgeSize?: number; // Maximum tasks in an execution, default is 1\n  tickTime?: number; // Debounce Time(ms), default is 0\n}\n```\n\n## `Reconciler`\n\nReconciler is a tool to schedule the executions between different Observables.\n\n```ts\nconst ob1$ = new TaskQueue()\nconst ob2$ = new TaskQueue()\nconst ob3$ = new TaskQueue()\n\nconst asyncFunc = async (x) =\u003e {\n  await new Promise(resolve =\u003e setTimeout(resolve, Math.random(1) * 1000))\n  console.log(x)\n}\n\n// Without Reconciler\nob1$.next(1)\nob2$.next(2)\nob3$.next(3)\n\nob1$.subscribe(console.log)\nob2$.subscribe(console.log)\nob3$.subscribe(console.log)\n\n\n// With Reconciler\nconst executor = new Reconciler(ob1$, ob2$, ob3$)\n\nexecutor.next(1, ob$1)\nexecutor.next(2, ob$2)\nexecutor.next(3, ob$3)\n\nob1$.subscribe(console.log)\nob2$.subscribe(console.log)\nob3$.subscribe(console.log)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaybemonad%2Ftask-queue-for-rxjs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaybemonad%2Ftask-queue-for-rxjs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaybemonad%2Ftask-queue-for-rxjs/lists"}