promise-singleflight
TypeScript icon, indicating that this package has built-in type declarations

1.0.0 • Public • Published

promise-singleflight

NPM

Installation

$ npm install --save promise-singleflight

API

create<Key, ReturnValue>(): (key: Key, fn: () => Promise<ReturnValue>) => Promise<ReturnValue>;

Return a singleflight wrap function.

const PromiseSingleflight = require("promise-singleflight")
const singleflight = PromiseSingleflight.create()
singleflight(key, async function(){
    ...
    return value
})

or

import * as PromiseSingleflight from 'promise-singleflight'
const singleflight = PromiseSingleflight.create()
singleflight(key, async function(){
    ...
    return value
})

Usage Example

const PromiseSingleflight = require("promise-singleflight")
const singleflight = PromiseSingleflight.create()
function delay(ms) {
    return new Promise(function (resolve) {
        setTimeout(resolve, ms)
    })
}

async function queryData(path) {
    return singleflight(path, async function () {
        console.log(`start queryData ${path}`)
        await delay(1000)
        console.log(`end queryData ${path}`)
        return `data:${path}`
    })
}

(async function () {
    const items = await Promise.all([
        queryData('/a'),
        queryData('/a'),
        queryData('/b'),
    ])
    console.log(items.join('\n'))
})()

// Output:
// start queryData /a
// start queryData /b
// end queryData /a
// end queryData /b
// data:/a
// data:/a
// data:/b

Reference Docs

Package Sidebar

Install

npm i promise-singleflight

Weekly Downloads

9

Version

1.0.0

License

ISC

Unpacked Size

9.03 kB

Total Files

7

Last publish

Collaborators

  • josudoey