@tofandel/debounce-promise

    4.0.2 • Public • Published

    debounce-promise

    Build Status Standard - JavaScript Style Guide

    NPM

    Create a debounced version of a promise returning function

    Install

    npm i -S debounce-promise
    

    Usage example

    var debounce = require('debounce-promise')
    
    function expensiveOperation(value) {
      return Promise.resolve(value)
    }
    
    var saveCycles = debounce(expensiveOperation, 100);
    
    [1, 2, 3, 4].forEach(num => {
      return saveCycles('call no #' + num).then(value => {
        console.log(value)
      })
    })
    
    // Will only call expensiveOperation once with argument `4` and print:
    //=> call no #4
    //=> call no #4
    //=> call no #4
    //=> call no #4

    With leading=true

    var debounce = require('debounce-promise')
    
    function expensiveOperation(value) {
      return Promise.resolve(value)
    }
    
    var saveCycles = debounce(expensiveOperation, 100, {leading: true});
    
    [1, 2, 3, 4].forEach(num => {
      return saveCycles('call no #' + num).then(value => {
        console.log(value)
      })
    })
    
    //=> call no #1
    //=> call no #4
    //=> call no #4
    //=> call no #4

    With leading=true and trailing=false

    var debounce = require('debounce-promise')
    
    function expensiveOperation(value) {
      return Promise.resolve(value)
    }
    
    var saveCycles = debounce(expensiveOperation, 100, {leading: true});
    
    [1, 2, 3].forEach(num => {
      return saveCycles('call no #' + num).then(value => {
        console.log(value)
      })
    })
    setTimeout(() => {
      saveCycles('call no #' + num).then(value => {
        console.log(value)
      })
    }, 110)
    
    //=> call no #1
    //=> call no #1
    //=> call no #1
    //=> call no #4

    With accumulate=true

    var debounce = require('debounce-promise')
    
    function squareValues (argTuples) {
      return Promise.all(argTuples.map(args => args[0] * args[0]))
    }
    
    var square = debounce(squareValues, 100, {accumulate: true});
    
    [1, 2, 3, 4].forEach(num => {
      return square(num).then(value => {
        console.log(value)
      })
    })
    
    //=> 1
    //=> 4
    //=> 9
    //=> 16

    Api

    debounce(func, [wait=0], [{leading: true|false, accumulate: true|false})

    Returns a debounced version of func that delays invoking until after wait milliseconds.

    Set leading: true if you want to call func and return its promise immediately.

    Set accumulate: true if you want the debounced function to be called with an array of all the arguments received while waiting.

    Supports passing a function as the wait parameter, which provides a way to lazily or dynamically define a wait timeout.

    Example timeline illustration

    function refresh() {
      return fetch('/my/api/something')
    }
    const debounced = debounce(refresh, 100)
    time (ms) ->   0 ---  10  ---  50  ---  100 ---
    -----------------------------------------------
    debounced()    | --- P(1) --- P(1) --- P(1) ---
    refresh()      | --------------------- P(1) ---
    
    const debounced = debounce(refresh, 100, {leading: true})
    time (ms) ->   0 ---  10  ---  50  ---  100 ---  110 ---
    --------------------------------------------------------
    debounced()    | --- P(1) --- P(2) --- P(2) --- P(2) ---
    refresh()      | --- P(1) --------------------- P(2) ---
    

    Install

    npm i @tofandel/debounce-promise

    DownloadsWeekly Downloads

    100

    Version

    4.0.2

    License

    MIT

    Unpacked Size

    7.73 kB

    Total Files

    4

    Last publish

    Collaborators

    • tofandel