timesync
Version:
Time synchronization between peers
71 lines (63 loc) • 1.46 kB
JavaScript
var Promise = require('./Promise');
/**
* Resolve a promise after a delay
* @param {number} delay A delay in milliseconds
* @returns {Promise} Resolves after given delay
*/
export function wait(delay) {
return new Promise(function (resolve) {
setTimeout(resolve, delay);
});
}
/**
* Repeat a given asynchronous function a number of times
* @param {function} fn A function returning a promise
* @param {number} times
* @return {Promise}
*/
export function repeat(fn, times) {
return new Promise(function (resolve, reject) {
var count = 0;
var results = [];
function recurse() {
if (count < times) {
count++;
fn().then(function (result) {
results.push(result);
recurse();
})
}
else {
resolve(results);
}
}
recurse();
});
}
/**
* Repeat an asynchronous callback function whilst
* @param {function} condition A function returning true or false
* @param {function} callback A callback returning a Promise
* @returns {Promise}
*/
export function whilst(condition, callback) {
return new Promise(function (resolve, reject) {
function recurse() {
if (condition()) {
callback().then(() => recurse());
}
else {
resolve();
}
}
recurse();
});
}
/**
* Simple id generator
* @returns {number} Returns a new id
*/
export function nextId() {
return _id++;
}
var _id = 0;