t-tasks 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/t-tasks.d.ts CHANGED
@@ -1875,7 +1875,7 @@ export declare namespace Task {
1875
1875
  * @param tasks iterable of tasks to execute
1876
1876
  * @returns task resolving to the result of first successfull task
1877
1877
  */
1878
- function any<T>(tasks: Iterable<Task<T>>): Task<unknown>;
1878
+ function any<T>(tasks: Iterable<Task<T>>): Task<T>;
1879
1879
  /**
1880
1880
  * Limit task execution based on another task
1881
1881
  *
@@ -1887,7 +1887,7 @@ export declare namespace Task {
1887
1887
  * @param limitTask limiting task
1888
1888
  * @returns task limites according to limitTask
1889
1889
  */
1890
- function limit<T>(task: Task<T>, limitTask: Task<void>): Task<unknown>;
1890
+ function limit<T>(task: Task<T>, limitTask: Task<void>): Task<T>;
1891
1891
  /**
1892
1892
  * Repeat task untill successful
1893
1893
  *
@@ -518,31 +518,40 @@ let Task;
518
518
  }
519
519
  _Task.all = all;
520
520
  function any(tasks) {
521
- const cell = settleCell();
522
521
  const taskArray = Array.from(tasks);
523
- if (taskArray.length < 1) return Task.canceled();
524
- const cancel = (error) => taskArray.map((task) => task._cancel(error)).every((r) => r);
525
- const list = taskArray.map(() => Maybe.nothing());
526
- const resolved = (value) => {
527
- cell.resolve(value.map(Either.right));
528
- cancel(Maybe.nothing());
529
- };
530
- const rejected = (error, i) => {
531
- list[i] = Maybe.just(error);
532
- if (Maybe.everyJust(list)) cell.resolve(Maybe.just(Either.left(list.map((v) => Just.just(v)))));
533
- };
534
- taskArray.map((task, i) => {
535
- return task.matchTap({
536
- resolved: (value) => resolved(Maybe.just(value)),
537
- rejected: (error) => rejected(error, i),
538
- canceled: () => resolved(Maybe.nothing())
522
+ if (taskArray.length === 0) return Task.rejected([]);
523
+ return Task.fromCallback((resolve, reject, cancel) => {
524
+ const errors = taskArray.map(() => Maybe.nothing());
525
+ let remaining = taskArray.length;
526
+ const checkAllFailed = () => {
527
+ remaining--;
528
+ if (remaining === 0) reject(errors.map((e) => e.match({
529
+ just: (err) => err,
530
+ nothing: () => void 0
531
+ })));
532
+ };
533
+ taskArray.forEach((task, i) => {
534
+ task.matchTap({
535
+ resolved: (value) => {
536
+ resolve(value);
537
+ taskArray.forEach((t) => t.cancel());
538
+ },
539
+ rejected: (error) => {
540
+ errors[i] = Maybe.just(error);
541
+ checkAllFailed();
542
+ },
543
+ canceled: () => {
544
+ cancel();
545
+ taskArray.forEach((t) => t.cancel());
546
+ }
547
+ });
539
548
  });
540
- });
541
- return Task.create(cell.promise, cancel);
549
+ return taskArray;
550
+ }, (subtasks) => subtasks.forEach((t) => t.cancel()));
542
551
  }
543
552
  _Task.any = any;
544
553
  function limit(task, limitTask) {
545
- return Task.any([task, limitTask.chain(Task.canceled)]).chainRejected((errors) => Task.rejected(errors[0]));
554
+ return Task.any([task, limitTask.chain(Task.canceled)]);
546
555
  }
547
556
  _Task.limit = limit;
548
557
  function repeat(taskFunction) {