document.write('<div class="javascript" style="font-family: monospace;"><span style="color: #003366; font-weight: bold;">Function</span>.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">promise</span> = <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />');
document.write('<span style="color: #009900; font-style: italic;">/* Arguments: <br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; condition to be met before running<br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; polling interval<br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; arguments for the function<br />');
document.write('*/</span><br />');
document.write('&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> __method=<span style="color: #000066; font-weight: bold;">this</span>,<br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; oArgs=arguments,<br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; args=<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>,i,__cond=oArgs<span style="color: #66cc66;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #66cc66;">&#93;</span>,__intv=oArgs<span style="color: #66cc66;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #66cc66;">&#93;</span>;<br />');
document.write('&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #66cc66;">&#40;</span>i=<span style="color: #CC0000;">2</span>; i&lt;oArgs.<span style="color: #006600;">length</span>; i++<span style="color: #66cc66;">&#41;</span> args.<span style="color: #006600;">push</span><span style="color: #66cc66;">&#40;</span>oArgs<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>__cond.<span style="color: #006600;">apply</span><span style="color: #66cc66;">&#40;</span>__cond,args<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">apply</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>,args<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">else</span> window.<span style="color: #006600;">setTimeout</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; __method.<span style="color: #006600;">promise</span>.<span style="color: #006600;">apply</span><span style="color: #66cc66;">&#40;</span>__method,oArgs<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>,__intv*<span style="color: #CC0000;">1000</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/* Very simplistic example of use */</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> fnc<span style="color: #66cc66;">&#40;</span>a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #009900; font-style: italic;">//What we\'re promising to do</span><br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span>a<span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<span style="color: #009900; font-style: italic;">//Dummy variable that\'s just not what we need it to be... yet</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">var</span> valueToTrack=<span style="color: #CC0000;">5</span>; <br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">//Make the promise</span><br />');
document.write('fnc.<span style="color: #006600;">promise</span><span style="color: #66cc66;">&#40;</span><br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> valueToTrack==<span style="color: #CC0000;">4</span>;&nbsp;<br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>,<span style="color: #CC0000;">1</span>,<span style="color: #3366CC;">\'I<span style="color: #000099; font-weight: bold;">\\'</span>ve kept my promise\'</span><br />');
document.write('<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('<span style="color: #009900; font-style: italic;">// at some point in the future, the condition changes...</span><br />');
document.write('setTimeout<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;valueToTrack--;&quot;</span>, <span style="color: #CC0000;">4000</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp;</div>');
document.write('<br />&nbsp;<br /><div style="font-size: 12px">Brought to you by the community at <a href="http://www.bytemycode.com/snippets/snippet/779/1/" target="_blank">byteMyCode</a>.</div>');
