'use strict'; const Aigle = require('./aigle'); const { INTERNAL } = require('./internal/util'); class Delay extends Aigle { constructor(ms) { super(INTERNAL); this._ms = ms; this._timer = undefined; } _resolve(value) { this._timer = setTimeout(() => Aigle.prototype._resolve.call(this, value), this._ms); return this; } _reject(reason) { clearTimeout(this._timer); Aigle.prototype._reject.call(this, reason); } } module.exports = { delay, Delay }; /** * Return a promise which will be resolved with `value` after `ms`. * @param {number} ms * @param {*} value * @return {Aigle} Returns an Aigle instance * @example * Aigle.delay(10) * .then(value => console.log(value); // undefined * * @example * Aigle.delay(10, 'test') * .then(value => console.log(value); // 'test' */ function delay(ms, value) { return new Delay(ms)._resolve(value); }