Security News
Bun 1.2 Released with 90% Node.js Compatibility and Built-in S3 Object Support
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.
p-wait-for
Advanced tools
The p-wait-for npm package is a utility that allows you to wait for a condition to be met before proceeding with the execution of your code. It is particularly useful for scenarios where you need to poll for a certain state or condition to be true before continuing.
Basic Usage
This feature allows you to wait for a basic asynchronous condition to be met. The `pWaitFor` function takes a condition function that returns a promise, and it resolves when the condition returns true.
const pWaitFor = require('p-wait-for');
const condition = async () => {
// Some asynchronous condition
return await someAsyncCheck();
};
(async () => {
await pWaitFor(condition);
console.log('Condition met!');
})();
Timeout
This feature allows you to specify a timeout for the condition to be met. If the condition is not met within the specified timeout, an error is thrown.
const pWaitFor = require('p-wait-for');
const condition = async () => {
// Some asynchronous condition
return await someAsyncCheck();
};
(async () => {
try {
await pWaitFor(condition, { timeout: 5000 });
console.log('Condition met within timeout!');
} catch (error) {
console.error('Condition not met within timeout');
}
})();
Interval
This feature allows you to specify an interval at which the condition function is called. This can be useful to reduce the frequency of checks and avoid overwhelming the system.
const pWaitFor = require('p-wait-for');
const condition = async () => {
// Some asynchronous condition
return await someAsyncCheck();
};
(async () => {
await pWaitFor(condition, { interval: 1000 });
console.log('Condition met!');
})();
The await-poll package provides similar functionality by allowing you to poll for a condition to be met. It offers a simple API for waiting for a condition with customizable intervals and timeouts. Compared to p-wait-for, await-poll has a more straightforward API but may lack some of the advanced options.
The promise-poller package is another alternative that allows you to poll for a condition to be met. It provides more advanced options such as retries, delays, and custom error handling. Compared to p-wait-for, promise-poller offers more flexibility and customization options.
Wait for a condition to be true
Can be useful for polling.
npm install p-wait-for
import pWaitFor from 'p-wait-for';
import {pathExists} from 'path-exists';
await pWaitFor(() => pathExists('unicorn.png'));
console.log('Yay! The file now exists.');
Returns a Promise
that resolves when condition
returns true
. Rejects if condition
throws or returns a Promise
that rejects.
Type: Function
Expected to return Promise<boolean> | boolean
.
Type: object
Type: number
Default: 20
Number of milliseconds to wait after condition
resolves to false
before calling it again.
Type: number | TimeoutOptions
Default: Infinity
Number of milliseconds to wait before automatically rejecting with a TimeoutError
.
You can customize the timeout Error
by specifying TimeoutOptions
.
import pWaitFor from 'p-wait-for';
import {pathExists} from 'path-exists';
const originalSetTimeout = setTimeout;
const originalClearTimeout = clearTimeout;
sinon.useFakeTimers();
await pWaitFor(() => pathExists('unicorn.png'), {
timeout: {
milliseconds: 100,
message: new MyError('Time’s up!'),
customTimers: {
setTimeout: originalSetTimeout,
clearTimeout: originalClearTimeout
}
}
});
console.log('Yay! The file now exists.');
Type: number
Default: Infinity
Milliseconds before timing out.
Passing Infinity
will cause it to never time out.
Type: string | Error
Default: 'Promise timed out after 50 milliseconds'
Specify a custom error message or error.
If you do a custom error, it's recommended to sub-class TimeoutError
.
Type: object
with function properties setTimeout
and clearTimeout
Custom implementations for the setTimeout
and clearTimeout
functions.
Useful for testing purposes, in particular to work around sinon.useFakeTimers()
.
Type: Function
Do something other than rejecting with an error on timeout.
Example:
import pWaitFor from 'p-wait-for';
import {pathExists} from 'path-exists';
await pWaitFor(() => pathExists('unicorn.png'), {
timeout: {
milliseconds: 50,
fallback: () => {
console.log('Time’s up! executed the fallback function!');
},
}
});
Type: boolean
Default: true
Whether to run the check immediately rather than starting by waiting interval
milliseconds.
Useful for when the check, if run immediately, would likely return false
. In this scenario, set before
to false
.
Resolve the main promise with a custom value.
import pWaitFor from 'p-wait-for';
import pathExists from 'path-exists';
const path = await pWaitFor(async () => {
const path = getPath();
return await pathExists(path) && pWaitFor.resolveWith(path);
});
console.log(path);
Exposed for instance checking.
FAQs
Wait for a condition to be true
The npm package p-wait-for receives a total of 1,014,820 weekly downloads. As such, p-wait-for popularity was classified as popular.
We found that p-wait-for demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.
Security News
Biden's executive order pushes for AI-driven cybersecurity, software supply chain transparency, and stronger protections for federal and open source systems.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.