1.2.0 • Published 3 months ago

promise.timeout v1.2.0

Weekly downloads
318
License
MIT
Repository
github
Last release
3 months ago

promise.timeout

add timeout support for async function

Build Status Coverage Status npm version npm downloads npm license

Install

$ pnpm add promise.timeout

Note

  • this module targets ES5 environment.
  • this module require global AbortController, Node.js has builtin global since v15

API

var ptimeout = require('promise.timeout')

ptimeout(fn, timeout)

  • fn the async function
  • timeout in ms
var ptimeout = require('promise.timeout')

// a function will cost 20ms
function test() {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      resolve(20)
    }, 20)
  })
}

var test10 = ptimeout(test, 10)
var test50 = ptimeout(test, 50)

// 10 timeout
try {
  await test10()
} catch (e) {
  e.should.be.ok()
  e.should.be.instanceof(ptimeout.TimeoutError)
  e.message.should.match(/timeout/)
  e.timeout.should.equal(10)
}

// 50 ok
var _50 = await test50()
_50.should.be.ok()
_50.should.equal(20)

singal

ptimeout will provide an extra runtime argument signal: AbortSignal, you can use the signal to register abort action. when timeout reached, the abort action will be executed

var ptimeout = require('promise.timeout')

// a function will cost 20ms
function test(signal) {
  return new Promise(function (resolve, reject) {
    var timer = setTimeout(function () {
      resolve(20)
    }, 20)

    // clean up
    signal.addEventListener('abort', () => {
      clearTimeout(timer)
    })
  })
}

var test10 = ptimeout(test, 10)
try {
  await test10()
} catch (e) {
  e.should.ok()
}

FAQ

Q: why move to AbortController

A:

Q: Why onCancel

A: Think onCancel like the AbortController

with AbortController you need to

function normalFn(a, r, g, s, controller: AbortController) {
  controller.signal.addEventListener('abort', () => {
    // cancel operations that starts in `normalFn` body
  })
}
  • and ptimeout will call the controller.abort() if any timeout exceeds
  • and with onCancel, you provide a cancel operation to ptimeout, ptimeout will call that

That's the same, and I don't want to depend on an extra package abort-controller

See Also

Changelog

CHANGELOG.md

License

the MIT License http://magicdawn.mit-license.org

1.2.0

3 months ago

1.1.1

1 year ago

1.1.0

1 year ago

1.1.2

1 year ago

1.0.0

2 years ago

0.4.2

3 years ago

0.4.1

4 years ago

0.4.0

4 years ago

0.3.0

4 years ago

0.2.1

6 years ago

0.2.0

7 years ago

0.1.2

7 years ago

0.1.1

8 years ago

0.1.0

8 years ago

0.0.3

8 years ago

0.0.2

8 years ago

0.0.1

8 years ago