flexbiz-server
Version:
Flexible Server
4 lines (3 loc) • 1.31 kB
JavaScript
async function delayHandler($flowState$$,$node$$,$payload$$,$abortSignal$$){const $nodeInstanceId$$=`${$flowState$$.instanceId}-${$node$$.id}`,$delayMs$$=Number($node$$.data?.milliseconds)||0;if($delayMs$$<=0){Logger.info(`[${$nodeInstanceId$$}] Delay <= 0ms. Passing through immediately.`);if($abortSignal$$.aborted)throw new DOMException("Aborted before 0ms delay","AbortError");return $payload$$}Logger.info(`[${$nodeInstanceId$$}] Starting ${$delayMs$$}ms delay...`);return new Promise(($resolve$$,
$reject$$)=>{if($abortSignal$$.aborted)return Logger.info(`[${$nodeInstanceId$$}] Aborted before delay started.`),$reject$$(new DOMException("Delay aborted before starting","AbortError"));let $timeoutId$$=null;const $abortListener$$=()=>{Logger.info(`[${$nodeInstanceId$$}] Abort signal received during delay.`);$timeoutId$$&&clearTimeout($timeoutId$$);$abortSignal$$.removeEventListener("abort",$abortListener$$);$reject$$(new DOMException("Delay aborted by signal","AbortError"))};$abortSignal$$.addEventListener("abort",
$abortListener$$,{once:!0});$timeoutId$$=setTimeout(()=>{Logger.info(`[${$nodeInstanceId$$}] Delay finished.`);$timeoutId$$&&clearTimeout($timeoutId$$);$abortSignal$$.removeEventListener("abort",$abortListener$$);$resolve$$($payload$$)},$delayMs$$)})}module.exports=delayHandler;