Security News
Cloudflare Adds Security.txt Setup Wizard
Cloudflare has launched a setup wizard allowing users to easily create and manage a security.txt file for vulnerability disclosure on their websites.
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 947,496 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
Cloudflare has launched a setup wizard allowing users to easily create and manage a security.txt file for vulnerability disclosure on their websites.
Security News
The Socket Research team breaks down a malicious npm package targeting the legitimate DOMPurify library. It uses obfuscated code to hide that it is exfiltrating browser and crypto wallet data.
Security News
ENISA’s 2024 report highlights the EU’s top cybersecurity threats, including rising DDoS attacks, ransomware, supply chain vulnerabilities, and weaponized AI.