Added the `AsyncTimeout(func, delay)` class, with awaitable `timeout()` and `for await`able `interval()`. Added documentation to the class Added a `example()` function that can show how it works or how to use it. Added README that has the title and what the file does. Fortune for async-timeout-js's current commit: Great blessing − 大吉allow-await-async-timeout-func
commit
66a5c7cc05
@ -0,0 +1,3 @@
|
||||
# AsyncTimeout - A promisified wrapper for `setTimeout()` and `setInterval()`
|
||||
|
||||
|
@ -0,0 +1,46 @@
|
||||
/// An async wrapper around `setTimeout()` and `setInterval()`.
|
||||
///
|
||||
/// # `setTimeout()`
|
||||
/// `await (new AsyncTimeout(() => "value", 100)).timeout() /* === "value" */` is `setTimeout(()=> "value", 100)` promisified.
|
||||
///
|
||||
/// # `setInterval()`
|
||||
/// `for await (const value of new AsyncTimeout(() => "value", 100)).interval()) { /* value === "value" */ }` is `setInterval(()=> "value", 100)` promisified.
|
||||
/// This is an infinite iterator. To cancel the interval, simply break out of the `for await` loop.
|
||||
///
|
||||
/// # Parameters
|
||||
/// * `thing` - The function to call after the timeout/interval. The result of the promise (or the yield for `interval()`) is the result of this function call. If the funtion throws, then the rejection of the promise will be that error thrown.
|
||||
/// * `interval` - The time to wait for the timeout or interval
|
||||
///
|
||||
/// # Examples
|
||||
/// See `examples` below.
|
||||
function AsyncTimeout(thing, interval)
|
||||
{
|
||||
this.timeout = () => new Promise((resolve, reject) => {
|
||||
setTimeout(() => {
|
||||
try {
|
||||
resolve(thing());
|
||||
} catch(e) { reject(e); }
|
||||
}, interval);
|
||||
});
|
||||
this.interval = async function*() => {
|
||||
while(true) {
|
||||
yield await new Promise((resolve, reject) => {
|
||||
setTimeout(() => {
|
||||
try { resolve(thing()); } catch(e) { reject(e); }
|
||||
}, interval);
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const example = async (_timeout) => {
|
||||
_timeout = _timeout || 100;
|
||||
|
||||
// Wait 100 then alert "hi"
|
||||
alert(await (new AsyncTimeout(() => "hi", _timeout)).timeout());
|
||||
|
||||
// Continuously wait 100 then alert "hi"
|
||||
for await (const value of new AsyncTimeout(() => "hi forever", _timeout).interval()) { alert(value); }
|
||||
};
|
||||
|
||||
|
Loading…
Reference in new issue