From b93cfc4e6ea951a5e47107c0b5dac3ef9b59a790 Mon Sep 17 00:00:00 2001 From: Krist Wongsuphasawat Date: Mon, 9 Sep 2019 12:50:19 -0700 Subject: [PATCH] feat: add promiseTimeout (#223) --- .../packages/superset-ui-core/src/index.ts | 1 + .../superset-ui-core/src/utils/promiseTimeout.ts | 13 +++++++++++++ .../test/utils/promiseTimeout.test.ts | 15 +++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/promiseTimeout.ts create mode 100644 superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/utils/promiseTimeout.test.ts diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/index.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/index.ts index e8d1e5f817a8..8714574216b8 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/index.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/index.ts @@ -8,5 +8,6 @@ export { default as convertKeysToCamelCase } from './utils/convertKeysToCamelCas export { default as isDefined } from './utils/isDefined'; export { default as isRequired } from './utils/isRequired'; export { default as makeSingleton } from './utils/makeSingleton'; +export { default as promiseTimeout } from './utils/promiseTimeout'; export * from './types'; diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/promiseTimeout.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/promiseTimeout.ts new file mode 100644 index 000000000000..c5d9af996368 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/promiseTimeout.ts @@ -0,0 +1,13 @@ +/** setTimeout that returns a promise */ +export default function promiseTimeout( + /** A function to be executed after the timer expires. */ + func: Function, + /** The time, in milliseconds (thousandths of a second), the timer should wait before the specified function or code is executed. If this parameter is omitted, a value of 0 is used, meaning execute "immediately", or more accurately, as soon as possible. */ + delay?: number, +) { + return new Promise(resolve => { + setTimeout(() => { + resolve(func()); + }, delay); + }); +} diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/utils/promiseTimeout.test.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/utils/promiseTimeout.test.ts new file mode 100644 index 000000000000..592d3d214e0a --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/utils/promiseTimeout.test.ts @@ -0,0 +1,15 @@ +import { promiseTimeout } from '../../src'; + +describe('promiseTimeout(func, delay)', () => { + it('resolves after delay', async () => { + const result = await promiseTimeout(() => 'abc', 10); + expect(result).toEqual('abc'); + }); + it('uses the timer', async () => { + const result = await Promise.race([ + promiseTimeout(() => 'abc', 10), + promiseTimeout(() => 'def', 20), + ]); + expect(result).toEqual('abc'); + }); +});