<div dir="ltr">I thought promises were introduced to simply the "whenever it happens" pattern ... using a delay seems a pretty pointless feature to me and setTimeout worked so far (15 years?) pretty well and it is cancelable.<div><br></div><div>Regardless delay though, canceling, beast or not, should be considered before all these changes will make it "impossible" to implement, IMO</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 27, 2014 at 2:52 PM, Tab Atkins Jr. <span dir="ltr"><<a href="mailto:jackalmage@gmail.com" target="_blank">jackalmage@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Mon, Oct 27, 2014 at 3:21 AM, Andrea Giammarchi<br>
<<a href="mailto:andrea.giammarchi@gmail.com">andrea.giammarchi@gmail.com</a>> wrote:<br>
> Not sure if discussed already but I believe `.cancel()` or<br>
> `.forgetAboutIt()` mechanism should be proposed before introducing any<br>
> `.delay()`<br>
><br>
> Promises often put developers in unmanaged roads where things keep being<br>
> "forgotten" and/or impossible to drop without ending up in the next chain,<br>
> undesired, or the error stack, even less desired.<br>
><br>
> What I mean is that if `setTimeout` is a desired pattern to replicate<br>
> through `.delay(ms)`, but I really don't understand why that would be a<br>
> desired pattern at all, `clearTimeout` functionality should be considered as<br>
> well.<br>
><br>
> A generic `.cancel()` would be most likely the easier approach but it should<br>
> be implemented upfront.<br>
<br>
</span>Cancelable promises are a completely different beast; it's not just a<br>
matter of adding a new method to Promise.prototype, it's changing the<br>
data structure pretty fundamentally.  Suddenly you have a new<br>
value-affecting capability, but it's exposed outside of the<br>
constructor.  You need to be able to react to a cancellation, so you<br>
can actually cancel the work being done, and possibly resolve the<br>
promise to some default value (or error).<br>
<br>
A promise that auto-resolves after a timeout, on the other hand, is a<br>
straightforward utility function of obvious usefulness, and requires<br>
no additional work:<br>
<br>
Promise.delay = function(ms) {<br>
  return new Promise(function(r) { setTimeout(r, ms); });<br>
}<br>
<br>
(Not tested, but this should be approximately right.)<br>
<span class="HOEnZb"><font color="#888888"><br>
~TJ<br>
</font></span></blockquote></div><br></div>