/** * Copyright 2018-present Facebook. * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * @format */ import {CancelledPromiseError} from './errors'; export class Idler { lastIdle: number; interval: number; kill: boolean; constructor() { this.lastIdle = 0; this.interval = 3; this.kill = false; } idle(): Promise { if (this.kill) { throw new CancelledPromiseError('Idler got killed'); } const now = performance.now(); if (now - this.lastIdle > this.interval) { this.lastIdle = now; return new Promise(resolve => setTimeout(resolve, 0)); } return Promise.resolve(); } cancel() { this.kill = true; } }