<snapdata remixID="9081976"><project name="Async javascript functions" app="Snap! 5.1, http://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAABxklEQVR4nO3XsY0aURhG0e2KhAAiCCelsEE0wEwj0wdNEJE8p7YsNlr5yrvnSC//giv9eh8DQh/1AH42AZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZIS4BvLsozb7TYej0c95VsT4BvP53NcLpcxTdPY7XZjnucxz/N4vV71tG9FgJ/Ytm0cj8cxTdMf73Q6jXVdx7qu9cT/ngA/sW3bOBwOfwV4Pp/HsiwC/AICfOP3E7zf78c8z+N6vTrBX0yAb9zvd5+Qf0CApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkfgFv9q+PXBsquwAAAABJRU5ErkJggg==</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" volume="100" pan="0" lines="round" ternary="false" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAACtUlEQVR4nO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Bo3+AAF/RMkcAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="8"><costumes><list struct="atomic" id="9"></list></costumes><sounds><list struct="atomic" id="10"></list></sounds><blocks></blocks><variables></variables><scripts><script x="25" y="225"><custom-block s="await call %repRing %inputs"><custom-block s="async ( %mult%s ) { %code }"><list><l>time</l></list><l>const t = Date.now() / 1000.0;&#xD;return new Promise(resolve =&gt; setTimeout(()=&gt;resolve(Date.now() / 1000.0 - t), time * 1000));</l></custom-block><list></list><comment w="106" collapsed="false">Indirect call example </comment></custom-block></script><script x="25" y="107"><custom-block s="await %repRing"><block s="evaluate"><custom-block s="async ( %mult%s ) { %code }"><list><l>time</l></list><l>const t = Date.now() / 1000.0;&#xD;return new Promise(resolve =&gt; setTimeout(()=&gt;resolve(Date.now() / 1000.0 - t), time * 1000));</l></custom-block><list><l>1</l></list></block><comment w="101" collapsed="false">Direct call example</comment></custom-block></script><script x="28" y="330"><custom-block s="await run %cmdRing %inputs"><custom-block s="async ( %mult%s ) { %code }"><list><l>time</l></list><l>const t = Date.now() / 1000.0;&#xD;return new Promise(resolve =&gt; setTimeout(()=&gt;resolve(Date.now() / 1000.0 - t), time * 1000));</l></custom-block><list></list><comment w="108" collapsed="false">Indirect call example </comment></custom-block></script></scripts></sprite></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="async ( %&apos;params&apos; ) { %&apos;code&apos; }" type="reporter" category="operators"><comment w="247" collapsed="false">Create an asynchronous JavaScript function</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input><input type="%code"></input></inputs><script><block s="doReport"><block s="reportJSFunction"><list><l>...__args</l></list><block s="reportJoinWords"><list><custom-block s="code %code"><l>var __state = new List([0,""]);&#xD;const __gval = () =&gt; __state;&#xD;const __exec = async (</l></custom-block><custom-block s="join %mult%mlt by %mlt"><block var="params"/><l>, </l></custom-block><l>) =&gt; {</l><block var="code"/><custom-block s="code %code"><l>;};&#xD;__exec(...__args).then(result =&gt; __state = new List([1, result])).catch(result =&gt; __state = new List([-1, result]));&#xD;return __gval;</l></custom-block></list></block></block></block></script></block-definition><block-definition s="join %&apos;text&apos; by %&apos;delim&apos;" type="reporter" category="operators"><comment w="174" collapsed="false">Join multiple strings by a delimeter</comment><header></header><code></code><translations></translations><inputs><input type="%mult%mlt"></input><input type="%mlt">,</input></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportListItem"><l>1</l><block var="text"/></block></block><block s="doIf"><block s="reportGreaterThan"><block s="reportListLength"><block var="text"/></block><l>1</l></block><script><block s="doFor"><l>i</l><l>2</l><block s="reportListLength"><block var="text"/></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block var="delim"/><block s="reportListItem"><block var="i"/><block var="text"/></block></list></block></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="await %&apos;promise&apos;" type="reporter" category="operators"><comment w="190" collapsed="false">Waits until an async function terminates (call it first and unringify)</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input></inputs><script><block s="doWaitUntil"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="evaluate"><block var="promise"/><list></list></block></block><l>0</l></block></block></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="evaluate"><block var="promise"/><list></list></block></block><l>-1</l></block><script><custom-block s="throw %s"><block s="reportListItem"><l>2</l><block s="evaluate"><block var="promise"/><list></list></block></block></custom-block></script></block><block s="doReport"><block s="reportListItem"><l>2</l><block s="evaluate"><block var="promise"/><list></list></block></block></block></script></block-definition><block-definition s="multiline %&apos;text&apos;" type="reporter" category="operators"><comment w="99" collapsed="false">Multiline text input</comment><header></header><code></code><translations></translations><inputs><input type="%mlt"></input></inputs><script><block s="doReport"><block var="text"/></block></script></block-definition><block-definition s="code %&apos;text&apos;" type="reporter" category="operators"><comment w="90" collapsed="false">Code text input</comment><header></header><code></code><translations></translations><inputs><input type="%code"></input></inputs><script><block s="doReport"><block var="text"/></block></script></block-definition><block-definition s="throw %&apos;message&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l></list><l>throw new Error(msg)</l></block><list><block var="message"/></list></block></script></block-definition><block-definition s="await call %&apos;function&apos; %&apos;inputs&apos;" type="reporter" category="control"><comment w="184" collapsed="false">Performs a call on an async function (make sure to unringify)</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%inputs"></input></inputs><script><block s="doReport"><custom-block s="await %repRing"><block s="evaluate"><block var="function"/><block var="inputs"/></block></custom-block></block></script></block-definition><block-definition s="await run %&apos;function&apos; %&apos;inputs&apos;" type="command" category="control"><comment w="119" collapsed="false">Run an async function (make sure to unringify)</comment><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input><input type="%inputs"></input></inputs><script><block s="doRun"><block s="reifyReporter"><autolambda><custom-block s="await %repRing"><block s="evaluate"><block var="function"/><block var="inputs"/></block></custom-block></autolambda><list></list></block><list></list></block></script></block-definition></blocks><variables></variables></project><media name="Async javascript functions" app="Snap! 5.1, http://snap.berkeley.edu" version="1"></media></snapdata>