Not to beat a dead horse but

* No, it hasn't caught on, as evidenced by the recent poster who had never
heard of it.
* Yes, I know it's used to describe the Promise executor pattern.
* "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.

Bob

On Wed, Jul 25, 2018 at 10:55 PM Jordan Harband <ljh...@gmail.com> wrote:

> It's already caught on - "revealing constructor pattern" is the pattern
> that describes the Promise executor.
>
> The "revealing module" pattern is obsolete anyways, but it functions on
> the same principle - using closures to reveal only explicit things instead
> of everything.
>
> On Wed, Jul 25, 2018 at 10:01 AM, Bob Myers <r...@gol.com> wrote:
>
>> Yes, I've encountered this "revealing constructor" terminology and find
>> it confusing. I hope it doesn't catch on.
>> A lot of people are likely to try to associate it with the "revealing
>> module" pattern, with which it actually has nothing in common.
>> It's a strange term because this pattern, if one wants to characterize it
>> in terms of "revealing" things,
>> is more about what is **not** being revealed (to the outside world), not
>> what is being revealed.
>>
>> It's a useful pattern seen also in the observable constructor, and
>> probably deserves to have a good name,
>> but I can't come up with anything myself, other than maybe the suboptimal
>> "callback-based constructor".
>>
>> Bob
>>
>> On Wed, Jul 25, 2018 at 6:45 PM Isiah Meadows <isiahmead...@gmail.com>
>> wrote:
>>
>>> Here's a quick overview of the "revealing constructor" pattern, if it
>>> helps: https://blog.domenic.me/the-revealing-constructor-pattern/
>>> -----
>>>
>>> Isiah Meadows
>>> m...@isiahmeadows.com
>>> www.isiahmeadows.com
>>>
>>>
>>> On Wed, Jul 25, 2018 at 7:05 AM, Herbert Vojčík <he...@mailbox.sk>
>>> wrote:
>>> >
>>> >
>>> > Isiah Meadows wrote on 20. 7. 2018 3:13:
>>> >>
>>> >> Sometimes, it's *very* convenient to have those `resolve`/`reject`
>>> >> functions as separate functions. However, when logic gets complex
>>> >> enough and you need to send them elsewhere, save a continuation, etc.,
>>> >> it'd be much more convenient to just have a capability object exposed
>>> >> more directly rather than go through the overhead and boilerplate of
>>> >> going through the constructor with all its callback stuff and
>>> >> everything.
>>> >>
>>> >> It's surprisingly not as uncommon as you'd expect for me to do this:
>>> >>
>>> >> ```js
>>> >> let resolve, reject
>>> >> let promise = new Promise((res, rej) => {
>>> >>      resolve = res
>>> >>      reject = rej
>>> >> })
>>> >> ```
>>> >>
>>> >> But doing this repeatedly gets *old*, especially when you've had to
>>> >> write it several dozen times already. And it comes up frequently when
>>> >> you're writing lower-level async utilities that require saving promise
>>> >> state and resolving it in a way that's decoupled from the promise
>>> >> itself.
>>> >>
>>> >> -----
>>> >>
>>> >> So here's what I propose:
>>> >>
>>> >> - `Promise.newCapability()` - This basically returns the result of
>>> >> [this][1], just wrapped in a suitable object whose prototype is
>>> >> %PromiseCapabilityPrototype% (internal, no direct constructor). It's
>>> >> subclass-safe, so you can do it with subclasses as appropriate, too.
>>> >> - `capability.resolve(value)` - This invokes the implicit resolver
>>> >> created for it, spec'd as [[Resolve]].
>>> >> - `capability.reject(value)` - This invokes the implicit rejector
>>> >> created for it, spec'd as [[Reject]].
>>> >> - `capability.promise` - This returns the newly created promise.
>>> >>
>>> >> Yes, this is effectively a deferred API, but revealing constructors
>>> >> are a bit too rigid and wasteful for some use cases.
>>> >
>>> >
>>> > Don't understand "revealing constructors". Can be done is userland in
>>> a few
>>> > lines. https://lolg.it/herby/deferred-lite
>>> >
>>> >> [1]: https://tc39.github.io/ecma262/#sec-newpromisecapability
>>> >>
>>> >> -----
>>> >>
>>> >> Isiah Meadows
>>> >> m...@isiahmeadows.com
>>> >> www.isiahmeadows.com
>>> >> _______________________________________________
>>> >> es-discuss mailing list
>>> >> es-discuss@mozilla.org
>>> >> https://mail.mozilla.org/listinfo/es-discuss
>>> >>
>>> >
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss@mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to