You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Sven Slootweg a15d6c32c3 1.0.1 4 years ago
.gitignore Initial commit 5 years ago
README.md Fix changelog and repository URL in package.json 4 years ago
example.js Initial commit 5 years ago
index.js Initial commit 5 years ago
package.json 1.0.1 4 years ago

README.md

@joepie91/promise-delay-since

A function that, when called, produces a Promise that resolves a specified amount of milliseconds since a particular timestamp - or immediately, if the delay since that timestamp has already passed.

This is particularly useful when implementing rate-limiting and/or task distribution code - your implementation only has to track the timestamp of the last call, and leave it up to this module to decide when to resolve a Promise that kickstarts the next task.

Example

See also example.js for a runnable version. This example uses Bluebird for Promise.try (read this article to understand why), but Bluebird is not required to use this module.

"use strict";

const Promise = require("bluebird");
const promiseDelaySince = require("@joepie91/promise-delay-since");

let startTimestamp = Date.now();

Promise.try(() => {
	// Logs immediately after running
	console.log("Hello world 1");
	
	return promiseDelaySince(startTimestamp, 2000);
}).then(() => {
	// Logs 2 seconds after running
	console.log("Hello world 2");
	
	return promiseDelaySince(startTimestamp, 3000);
}).then(() => {
	// Logs 3 seconds after running
	console.log("Hello world 3");
});

API

promiseDelaySince(sinceTimestamp, delay)

Creates a new Promise that will resolve delay milliseconds from the specified sinceTimestamp. If the current time is later than sinceTimestamp + delay, the returned Promise will resolve immediately.

  • sinceTimestamp: The reference timestamp to start counting from, as a 'UNIX timestamp' in milliseconds (like you get from Date.now()).
  • delay: The delay as a number, in milliseconds.

The Promise will never reject.

Changelog

v1.0.1 (February 17, 2020)

  • Fixed repository URL in package.json

v1.0.0 (April 23, 2019)

Initial release.