1.0.0 • Published 1 year ago

@dreamworld/async-tasks v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Async Tasks

  • It is used to manage async tasks with redux state.

Usage pattern

Activate reducer on slice (Required)

import * as asyncTasks from '@dreamworld/async-tasks';
import { store } from "path/to/store";

asyncTask.init(store);

Use Generator function to run any async task

Foreground task
import { run } from '@dreamworld/async-tasks';

try {
  const result = yield call(run, taskId, fn, timeoutMillis);
} catch (e) {
  //handle error
}
Background task
import { run } from '@dreamworld/async-tasks';

try {
  const taskId = yield fork(run, taskId, fn, timeoutMillis);
  yield cancel(taskId);
} catch (e) {
  //handle error
}

To retrieve the result of a Task from another Saga

import { taskResult } from '@dreamworld/async-tasks';

try {
  const result = yield call(taskResult, taskId);
} catch (e) {
  //if Task failed.
}

Selectors

  • Task get(id): Returns Task of given id.
  • String status(id): Returns current status of given taskId
  • Object result(id): Returns result of given taskId

It manages state at below path.

Path: ___DW_asyncTasks.$taskId

namedata typedescription
statusStringPossible values: IN_PROGRESS, SUCCESS and FAILED.
startedAtNumberWhat Task execution is started
completedAtNumberWhen Task is completed; status changed to SUCCESS or FAILED.
resultObjectTask result. Promise resolved with this
errorErrorStringIf rejected with Error then Error.message. If String, then directly used; Otherwise toString(). CANCELLED - if Task is cancelled by User. TIMED_OUT - If Task didn’t complete in set limit.