Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Promise effects like retry, timeout, observation over promises for advanced use cases or test purposes.

NotificationsYou must be signed in to change notification settings

mkg0/promise-effects

Repository files navigation

npmnpm

Fully typed promise effects to play with async handlers in a pleasent way.

EffectDesc
retryPromiseConverts a promise creator to repetitive
waitCreates a promise to resolve for the given time long.
observePromiseCreates observable promises from the given promise
timeoutTimeout example
Polling⏱ Polling example
Latest
CancelablePromise

Usage

Install package

npm install promise-effects

Import module

import{retryPromise}from'promise-effects'// orimportretryPromisefrom'promise-effects/retryPromise'

Effects

RetryPromise

It's a high-order function that gives the capabilify of retry to a function that creates promise.

constrepetitiveFetch=retryPromise(fetch,{retry:3,onReconnecting:({ attemptNumber})=>console.log(`Fetching has failed(${attemptNumber})... Retrying...`),})repetitiveFetch('https://www.mocky.io/v2/5185415ba171ea3a00704eed').then(resp=>resp.json()).then(console.log).catch(()=>console.log('Failed!'))// > Fetching has failed(1)... Retrying...// > Fetching has failed(2)... Retrying...// > Fetching has failed(3)... Retrying...// > Failed!

Options

Option NameType
onReconnectingfn:({attemptNumber: number, remainingTries: number, error: Error})
delaynumber
delay{ delay: number, factor: number, max?: number, min?: number }
delay`fn: ({attemptNumber: number, remainingTries: number, error: Error}) => number
shouldRetry`fn: ({attemptNumber: number, remainingTries: number, error: Error}) => booleaan
retrynumber

observePromise

It wraps promises to observe the status. You can get if the promisefulfilled,rejected orpending. It's beneficial on test purposes.

constobserved=observePromise(fetch('http://google.com'))console.log(observed.isPending())// > trueconsole.log(observed.isRejected())// > falseconsole.log(observed.isFulfilled())// > falseconsole.log(observed.status)// > 'PENDING'observed.then(result=>{console.log(observed.status)// > 'RESOLVED'console.log(observed.isFulfilled())// > true}).catch(()=>{console.log(observed.status)// > 'REJECTED'console.log(observed.isRejected())// > true})

wait

Creates a promise to resolve for the given time long.

constprintMessage=(count=0)=>Promise.resolve().then(()=>console.log(`You will see this message every second(${count})`)).then(()=>wait(1000).then(()=>printMessage(count+1)))printMessage()// > You will see this message every second(0)// > You will see this message every second(1)// > You will see this message every second(2)// > You will see this message every second(3)// > ...

timeout

You don't need an exclusive timeout function for timeout. Usewait withES Promise.race instead.

// fail in 1 secPromise.race([fetch('https://www.mocky.io/v2/5185415ba171ea3a00704eed?mocky-delay=1200ms').then(res=>resp.json()),wait(1000).then(()=>Promise.reject('Timeout!'))])// > Uncaught (in promise) Timeout!
// will mock response if the first request doesn't resolve in 1 secconstresult=awaitPromise.race([fetch('https://www.mocky.io/v2/5185415ba171ea3a00704eed?mocky-delay=1200ms').then(res=>resp.json()),wait(1000).then(()=>({hello:'mock'}))])console.log(result)// > { hello: 'mock' }

Changelog

All notable changes to this project will be documented in thechangelog file.

About

Promise effects like retry, timeout, observation over promises for advanced use cases or test purposes.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp