@kennysng/c-promise
TypeScript icon, indicating that this package has built-in type declarations

2.2.0 • Public • Published

c-promise

npm version

This is a cancelable Promise library.

Usage

new CancelablePromise(async (resolve, reject, check, canceled) => {
  try {
    // async tasks
    await asyncTask()
    await asyncTask()

    // check if cancel() is called
    await check()
    
    await asyncTask()
    await asyncTask()

    // return result
    return resolve()
  }
  catch (e) {
    // emit canceled event
    if (e instanceof CancelError) return canceled()

    // throw error
    return reject(e)
  }
})

new CancelablePromise(anotherCancelablePromise, async (promise, resolve, reject, check, canceled) => {
  try {
    // async tasks
    await asyncTask()
    await asyncTask()

    // check if cancel() is called
    await check()

    // wait for the promise
    await promise

    // return result
    return resolve()
  }
  catch (e) {
    // emit canceled event
    if (e instanceof CancelError) return canceled()

    // throw error
    return reject(e)
  }
})

new CancelablePromise(createAnotherCancelablePromiseFn, async (createFn, resolve, reject, check, canceled) => {
  try {
    // async tasks
    await asyncTask()
    await asyncTask()

    // check if cancel() is called
    await check()

    // create and wait for the promise
    await createFn()

    // return result
    return resolve()
  }
  catch (e) {
    // emit canceled event
    if (e instanceof CancelError) return canceled()

    // throw error
    return reject(e)
  }
})

Pay attention

check() function consists of 2 steps:

  1. setTimeout() sleep to wait for cancel request

  2. check if canceled. It true, throw CancelError

Note that the setTimeout() step will put great overhead on computation time. Avoid abuse use of check(). Only check at critical point.

Readme

Keywords

none

Package Sidebar

Install

npm i @kennysng/c-promise

Weekly Downloads

128

Version

2.2.0

License

Apache-2.0

Unpacked Size

22.4 kB

Total Files

6

Last publish

Collaborators

  • kennysng