<div dir="ltr"><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">> It allows you to reveal things, selectively,<span> </span></span><span class="gmail-il" style="font-size:small;text-decoration-style:initial;text-decoration-color:initial">just</span><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span>as the<span> </span></span><span class="gmail-il" style="font-size:small;text-decoration-style:initial;text-decoration-color:initial">revealing</span><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span></span><span class="gmail-il" style="font-size:small;text-decoration-style:initial;text-decoration-color:initial">module</span><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span></span><span class="gmail-il" style="font-size:small;text-decoration-style:initial;text-decoration-color:initial">pattern</span><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span></span><span class="gmail-il" style="font-size:small;text-decoration-style:initial;text-decoration-color:initial">does</span><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">.</span> \<div><br></div><div>

<div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">The revealing module pattern is so named precisely because it reveals (to clients) certain aspects of the "module" in question.</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Yes, it hides other aspects, but only by virtue of not revealing them. </div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">If you want to support the terminology of "revealing constructor pattern", could you please state *what* is being revealed, exactly, to *whom*? </div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">When I call a promise constructor I get back one thing and one thing only, which is a promise.</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Is the notion that it is the promise which is being revealed?<br>In that sense, all APIs "reveal" their results.</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">If is the intent of using this term that the content of the executor is being revealed to the coder when he views the code?</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">All code is revealed when it is viewed.</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">It would seem to me that to qualify for the name "revealing constructor pattern" it ought to be revealing something.</div><br class="gmail-Apple-interchange-newline">


<span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">(separately, the measure of "caught on" is not "there<span> </span></span><span class="gmail-il" style="font-size:small;text-decoration-style:initial;text-decoration-color:initial">does</span><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span>not exist someone who has not heard of it")</span>

<div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">This group is not a court of law with evidentiary rules.</span></div><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">That someone with a degree of interest in JS to the extent they are a regular on the ML has never heard of it would seem to mean at least that it has not caught on *widely*.</span></div><div>I myself had worked with and read about ES6 promises extensively before I heard the term.</div><div>Perhaps in the future I can write things like "It might be argued by some that there is some possibility that the evidence could conceivably be interpreted as indicating that it may be the case that it has not caught on widely"?</div><div><br></div><div>In any case, "catching on", however you define it, would seem to require more than a grand total of two Google results for "revealing constructor pattern", one of which is by the person that invented it. </div><div><br></div><div>Bob<br></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jul 26, 2018 at 3:13 AM Jordan Harband <<a href="mailto:ljharb@gmail.com">ljharb@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">It allows you to reveal things, selectively, just as the revealing module pattern does.<div><br></div><div>(separately, the measure of "caught on" is not "there does not exist someone who has not heard of it")</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 25, 2018 at 2:04 PM, Bob Myers <span dir="ltr"><<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Not to beat a dead horse but<div><br></div><div>* No, it hasn't caught on, as evidenced by the recent poster who had never heard of it.</div><div>* Yes, I know it's used to describe the Promise executor pattern.</div><div>* "Revealing module pattern" reveals. The so-called "revealing constructor pattern" does not reveal anything. It hides. So the term is semantically incorrect from the beginning.</div><span class="m_-9041452147327588578HOEnZb"><font color="#888888"><div><br></div><div>Bob</div></font></span></div><div class="m_-9041452147327588578HOEnZb"><div class="m_-9041452147327588578h5"><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 25, 2018 at 10:55 PM Jordan Harband <<a href="mailto:ljharb@gmail.com" target="_blank">ljharb@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">It's already caught on - "revealing constructor pattern" is the pattern that describes the Promise executor.<div><br></div><div>The "revealing module" pattern is obsolete anyways, but it functions on the same principle - using closures to reveal only explicit things instead of everything.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 25, 2018 at 10:01 AM, Bob Myers <span dir="ltr"><<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Yes, I've encountered this "revealing constructor" terminology and find it confusing. I hope it doesn't catch on.<div>A lot of people are likely to try to associate it with the "revealing module" pattern, with which it actually has nothing in common.</div><div>It's a strange term because this pattern, if one wants to characterize it in terms of "revealing" things,</div><div>is more about what is **not** being revealed (to the outside world), not what is being revealed.</div><div><br></div><div>It's a useful pattern seen also in the observable constructor, and probably deserves to have a good name, </div><div>but I can't come up with anything myself, other than maybe the suboptimal "callback-based constructor".</div><span class="m_-9041452147327588578m_5195734709315651095m_2976256944224245252HOEnZb"><font color="#888888"><div><br></div><div>Bob</div></font></span></div><div class="m_-9041452147327588578m_5195734709315651095m_2976256944224245252HOEnZb"><div class="m_-9041452147327588578m_5195734709315651095m_2976256944224245252h5"><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 25, 2018 at 6:45 PM Isiah Meadows <<a href="mailto:isiahmeadows@gmail.com" target="_blank">isiahmeadows@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Here's a quick overview of the "revealing constructor" pattern, if it<br>
helps: <a href="https://blog.domenic.me/the-revealing-constructor-pattern/" rel="noreferrer" target="_blank">https://blog.domenic.me/the-revealing-constructor-pattern/</a><br>
-----<br>
<br>
Isiah Meadows<br>
<a href="mailto:me@isiahmeadows.com" target="_blank">me@isiahmeadows.com</a><br>
<a href="http://www.isiahmeadows.com" rel="noreferrer" target="_blank">www.isiahmeadows.com</a><br>
<br>
<br>
On Wed, Jul 25, 2018 at 7:05 AM, Herbert Vojčík <<a href="mailto:herby@mailbox.sk" target="_blank">herby@mailbox.sk</a>> wrote:<br>
><br>
><br>
> Isiah Meadows wrote on 20. 7. 2018 3:13:<br>
>><br>
>> Sometimes, it's *very* convenient to have those `resolve`/`reject`<br>
>> functions as separate functions. However, when logic gets complex<br>
>> enough and you need to send them elsewhere, save a continuation, etc.,<br>
>> it'd be much more convenient to just have a capability object exposed<br>
>> more directly rather than go through the overhead and boilerplate of<br>
>> going through the constructor with all its callback stuff and<br>
>> everything.<br>
>><br>
>> It's surprisingly not as uncommon as you'd expect for me to do this:<br>
>><br>
>> ```js<br>
>> let resolve, reject<br>
>> let promise = new Promise((res, rej) => {<br>
>>      resolve = res<br>
>>      reject = rej<br>
>> })<br>
>> ```<br>
>><br>
>> But doing this repeatedly gets *old*, especially when you've had to<br>
>> write it several dozen times already. And it comes up frequently when<br>
>> you're writing lower-level async utilities that require saving promise<br>
>> state and resolving it in a way that's decoupled from the promise<br>
>> itself.<br>
>><br>
>> -----<br>
>><br>
>> So here's what I propose:<br>
>><br>
>> - `Promise.newCapability()` - This basically returns the result of<br>
>> [this][1], just wrapped in a suitable object whose prototype is<br>
>> %PromiseCapabilityPrototype% (internal, no direct constructor). It's<br>
>> subclass-safe, so you can do it with subclasses as appropriate, too.<br>
>> - `capability.resolve(value)` - This invokes the implicit resolver<br>
>> created for it, spec'd as [[Resolve]].<br>
>> - `capability.reject(value)` - This invokes the implicit rejector<br>
>> created for it, spec'd as [[Reject]].<br>
>> - `capability.promise` - This returns the newly created promise.<br>
>><br>
>> Yes, this is effectively a deferred API, but revealing constructors<br>
>> are a bit too rigid and wasteful for some use cases.<br>
><br>
><br>
> Don't understand "revealing constructors". Can be done is userland in a few<br>
> lines. <a href="https://lolg.it/herby/deferred-lite" rel="noreferrer" target="_blank">https://lolg.it/herby/deferred-lite</a><br>
><br>
>> [1]: <a href="https://tc39.github.io/ecma262/#sec-newpromisecapability" rel="noreferrer" target="_blank">https://tc39.github.io/ecma262/#sec-newpromisecapability</a><br>
>><br>
>> -----<br>
>><br>
>> Isiah Meadows<br>
>> <a href="mailto:me@isiahmeadows.com" target="_blank">me@isiahmeadows.com</a><br>
>> <a href="http://www.isiahmeadows.com" rel="noreferrer" target="_blank">www.isiahmeadows.com</a><br>
>> _______________________________________________<br>
>> es-discuss mailing list<br>
>> <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
>> <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
>><br>
><br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
</div></div><br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</blockquote></div>
</div></div></blockquote></div><br></div>
</blockquote></div>