Function singletonPromiseFn

  • Create singleton promise function, it can be called only once.

    And later you can reset it to make it can be called again.

    Example

    it('should singletonPromiseFn works', async() => {
    let dummy = 0

    const fn = vi.fn(async() => {
    await sleep(10)
    dummy += 1
    return dummy
    })

    const promise = singletonPromiseFn(fn)
    expect(dummy).toBe(0)
    expect(fn).toBeCalledTimes(0)

    const res = await promise()
    expect(res).toBe(1)
    expect(fn).toBeCalledTimes(1)
    expect(dummy).toBe(1)

    // call wrapper again, but not call fn again, because it's staled
    const res1 = await promise()
    expect(res1).toBe(1)
    expect(fn).toBeCalledTimes(1)
    expect(await promise()).toBe(1)
    expect(fn).toBeCalledTimes(1)
    expect(dummy).toBe(1)

    // reset staled promise, make it can be called again
    await promise.reset()
    // call wrapper again, and call fn again
    const res2 = await promise()
    expect(res2).toBe(2)
    expect(fn).toBeCalledTimes(2)
    expect(dummy).toBe(2)
    })

    Type Parameters

    • T

    Parameters

    • fn: (() => Promise<T>)
        • (): Promise<T>
        • Returns Promise<T>

    Returns SingletonPromiseReturn<T>

Generated using TypeDoc