/** * Hachette feature initialization promise * * Copyright (C) 2021 Wojtek Kosior * Redistribution terms are gathered in the `copyright' file. */ /* * 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 get_result(state) { if (state.ready) return state.result; 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); } /* * EXPORTS_START * EXPORT make_once * EXPORTS_END */ > Wojtek's customized Guix
aboutsummaryrefslogtreecommitdiff
path: root/gnu.scm
AgeCommit message (Expand)Author
2020-07-25Use 'formatted-message' instead of '&message' where appropriate....Ludovic Courtès
2020-07-25utils: Move '&fix-hint' to (guix diagnostics)....Ludovic Courtès
2020-07-25utils: Move <location> and '&error-location' to (guix diagnostics)....Ludovic Courtès