Skip to content

setInterval with setTimeout semantics for promises and async/await

License

Notifications You must be signed in to change notification settings

andyfleming/interval-promise

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Interval Promise

NPM Version Build Status Coverage Status

Overview

This library provides a simple mechanism for running a promise with a given amount of time between executions.

Standard Javascript » setInterval()

traditional interval

interval-promise » interval()

interval promise

Installation

npm install interval-promise

Usage

Simple example using async-await

const interval = require('interval-promise')

// Run a function 10 times with 1 second between each iteration
interval(async () => {
    await someOtherPromiseReturningFunction()
    await another()
}, 1000, {iterations: 10})

API

interval(func, intervalLength, options = {}) // returns Promise<undefined>

Arguments

Argument Attritubes Description
func function Required
Function to execute for each interval. MUST return a promise.

Two arguments are passed to this function.
  • iterationNumber number — The iteration number (starting at 1)
  • stop function — used to "stop" (skipping all remaining iterations)
intervalLength number | function Required
Length in ms to wait between iterations. Should be (or return) a non-negative integer.

If a function is used, one parameter iterationNumber (starting at 1) is passed.
options object Optional settings (detailed below).
options.iterations number Default: Infinity
The number of times to execute the function. Must be Infinity or an integer greater than 0.
options.stopOnError boolean Default: true
If true, no subsequent calls will be made. The promise returned by interval() will be rejected and pass through the error thrown.

Project Values

  • Approachability — Basic usage should be concise and readable.
  • Debuggability — Error feedback should be helpful and error handling options should be flexible.
  • Stability — Functionality should be well-tested and reliable.

Acknowledgements

This library was inspired by reissue.

FAQ

How can I stop the interval from outside the interval function?

There isn't currently direct feature to stop the iterations externally. You can, however, achieve this by checking a variable in the parent scope (of where the function is defined). Check out the code below.

const interval = require('interval-promise')

let stoppedExternally = false
const stopExternally = () => { stoppedExternally = true }

interval(async (iteration, stop) => {

    if (stoppedExternally) {
        stop()
    }
    
    // ... normal functionality ...
    
}, 1000)

// Some other work...
someOtherWork().then(() => {

    // Now that our "other work" is done, we can stop our interval above with:
    stopExternally()

})

About

setInterval with setTimeout semantics for promises and async/await

Resources

License

Stars

Watchers

Forks

Packages

No packages published