https://github.com/sqmk/waitup
Delays and retries within Promise chains
https://github.com/sqmk/waitup
Last synced: 6 months ago
JSON representation
Delays and retries within Promise chains
- Host: GitHub
- URL: https://github.com/sqmk/waitup
- Owner: sqmk
- License: mit
- Created: 2015-10-30T04:48:56.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2015-12-04T04:34:35.000Z (over 10 years ago)
- Last Synced: 2025-10-04T14:31:10.098Z (10 months ago)
- Language: JavaScript
- Size: 11.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Waitup - Delays and retries within Promise chains
[](https://www.npmjs.com/package/waitup)
[](https://travis-ci.org/sqmk/waitup)
> Wait up for whatever.
Waitup provides delays and retries within Promise chains.
## Installation
Waitup was written for **Node.js 4+**.
`npm install --save waitup`
## Usage
There are several ways of using Waitup.
### Simple Delays
Waitup can be used to introduce a delay before continuing within a Promise chain.
```js
let waitup = require('waitup');
// Delay is in milliseconds, result is a Promise
waitup(5000)
.then(() => {
console.log('Waited approximately 5 seconds...')
// Alternative method of configuring delay
return waitup({
delay: 2500
});
})
.then(() => {
console.log('Waited approximately 2.5 seconds this time...');
});
```
Calling waitup returns a **Promise**. The default delay is **1 second** (1000 milliseconds).
### Wait Up For Completion
Waitup can also be configured to wait for the completion of an operation. A callback
can be provided to waitup's *for* option. This callback accepts a single argument
for the *waitee*. When the operation is considered complete, return the value of
*waitee.done()*. An optional result can be provided to *waitee.done()* to forward
to the resolved promise.
```js
// Set someResult to true in approximately 5 seconds
let someResult = false;
setTimeout(() => someResult = true, 5000);
// Check every 0.5 seconds for operation to complete
waitup({
for: waitee => {
if (someResult === true) {
return waitee.done('example result');
}
console.log('someResult not true yet');
},
delay: 500
})
.then(exampleResult => {
console.log('Waitee is done waiting!');
console.log(`Result: ${exampleResult}`);
});
```
Additionally, a number of retries can be configured before rejection. Set the
number of allowable retries to waitup's *retries* option.
```js
let someResult = false;
// Check every 0.5 seconds for someResult to change to true
waitup({
for: waitee => {
if (someResult === true) {
return waitee.done();
}
console.log('someResult not true yet');
},
retries: 5,
delay: 500
})
.then(() => {
console.log('This will never succeed...');
})
.catch(error => {
console.log(error.stack);
});
```
If *retries* are not configured, or if the *waitee.done()* value is never returned,
the application could run indefinitely.
## Examples
See more examples in the [examples](examples) directory.
## Logo
Waitup's initial logo was designed by scorpion6 on Fiverr. Font used is Lato Light.
## License
This software is licensed under the MIT License. [View the license](LICENSE).
Copyright © 2015 [Michael K. Squires](http://sqmk.com)