To wrap my head around createRoot I needed something much more basic.
// $ node index.mjs//// NOTE: in Node.js "solid-js" maps to // "./node_modules/solid-js/dist/server.js"// which doesn't run Effects//import{createEffect,createSignal,createRoot,}from'./node_modules/solid-js/dist/solid.js';constlog=console.log;functionexecutor(resolve,_reject){createRoot(withRxGraph);// ---functionwithRxGraph(dispose){const[count,setCount]=createSignal(0);letresult;createEffect(()=>{log('running effect');result=count();});setTimeout(()=>{log('incrementing');setCount((n)=>n+1);log('flushing');dispose();resolve(result);});log('end setup');}}newPromise(executor).then((n)=>log('result',n));
Leaving it here in case somebody else might find it useful.
// $ node index.mjs//// NOTE: in Node.js "solid-js" maps to "./node_modules/solid-js/dist/server.js"// which doesn't run Effects//import{createEffect,createSignal,createRoot,}from'./node_modules/solid-js/dist/solid.js';constlog=console.log;asyncfunctionrootAndRun(timeoutMs,factory){letdisposeFn;lettimeoutId;try{returnawaitnewPromise(executor);}finally{if(disposeFn){log('dispose');disposeFn();disposeFn=undefined;}if(timeoutId){clearTimeout(timeoutId);timeoutId=undefined;}}// ---functionexecutor(resolve,reject){createRoot((dispose)=>{disposeFn=dispose;timeoutId=setTimeout(timeout,timeoutMs);// queueMicrotask/setTimeout allows `setup` to finish// before exercising the reactive graph with `run`construn=factory(done);if(typeofrun==='function')queueMicrotask(run);});// ---functiontimeout(){timeoutId=undefined;reject(newError('Timed out'));}functiondone(data,err){log('done');if(err!=undefined)reject(err);elseresolve(data);}}}functionfactory(done){// `setup` immediatelyconst[count,setCount]=createSignal(0);letresult;createEffect(()=>{log(typeofresult==='number'?'effect':'first effect');result=count();});log('end setup');// package `run` in a functionreturnfunctionrun(){// now effects are synchronoussetCount((n)=>n+1);log('past increment');done(result);};}try{constresult=awaitrootAndRun(1000,factory);console.log(result);}catch(err){console.error('ERROR',err);}
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Thank You.
To wrap my head around
createRoot
I needed something much more basic.Leaving it here in case somebody else might find it useful.