function createThrottle(delay, {invalidation: invalidated = invalidation} = {}) {
const delayed = () => new Promise(resolve => setTimeout(resolve, delay));
const rejected = invalidated.then(() => Promise.reject('Invalidated'));
let next = Promise.resolve();
return (fn) => {
const ret = Promise.race([rejected, next]).then(fn);
next = next.then(delayed);
return ret;
};
}