/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: BUSL-1.1 */ import Service from '@ember/service'; import promisedTimeoutFactory from 'consul-ui/utils/promisedTimeout'; import { next } from '@ember/runloop'; const promisedTimeout = promisedTimeoutFactory(Promise); export default class TimeoutService extends Service { // TODO: milliseconds should default to 0 or potentially just null // if it is 0/null use tick/next instead // if Octane eliminates the runloop things, look to use raf here instead execute(milliseconds, cb) { return promisedTimeout(milliseconds, cb); } tick() { return new Promise(function (resolve, reject) { next(resolve); }); } }