diff options
Diffstat (limited to 'common/once.js')
-rw-r--r-- | common/once.js | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/common/once.js b/common/once.js index d56b3c8..e3e6dbe 100644 --- a/common/once.js +++ b/common/once.js @@ -5,37 +5,37 @@ * Redistribution terms are gathered in the `copyright' file. */ -"use strict"; - /* * This module provides an easy way to wrap an async function into a promise * so that it only gets executed once. */ -(() => { - async function assign_result(state, result_producer) - { - state.result = await result_producer(); - state.ready = true; - for (let cb of state.waiting) - setTimeout(cb, 0, state.result); - state.waiting = undefined; - } +async function assign_result(state, result_producer) +{ + state.result = await result_producer(); + state.ready = true; + for (let cb of state.waiting) + setTimeout(cb, 0, state.result); + state.waiting = undefined; +} - async function get_result(state) - { - if (state.ready) - return state.result; +async function get_result(state) +{ + if (state.ready) + return state.result; - return new Promise((resolve, reject) => state.waiting.push(resolve)); - } + return new Promise((resolve, reject) => state.waiting.push(resolve)); +} - function make_once(result_producer) - { - let state = {waiting : [], ready : false, result : undefined}; - assign_result(state, result_producer); - return () => get_result(state); - } +function make_once(result_producer) +{ + let state = {waiting : [], ready : false, result : undefined}; + assign_result(state, result_producer); + return () => get_result(state); +} - window.make_once = make_once; -})(); +/* + * EXPORTS_START + * EXPORT make_once + * EXPORTS_END + */ |