Promise sub-class: super((resolve, reject) => this) ?

Logan Smyth loganfsmyth at gmail.com
Wed Jun 3 03:08:07 UTC 2015


To clarify things, since I don't think it's been made abundantly clear, the
example that Sebastian gave would work in a standard ES6 environment,
correct? It is only if the callback were executed synchronously that the
exception would be thrown since the `this` binding has not yet been
initialized?
Transpilers however have elected to prevent this to err on the side of
ensuring that invalid ES6 allowed through because adding runtime checking
for the `this` binding would be difficult?



On Tue, Jun 2, 2015 at 7:37 PM, Brendan Eich <brendan at mozilla.org> wrote:

> With best intentions I must say that you are overreacting. The
> subject-line code (h/t Mark Miller for pointing me at it!) in context of
> the superclass constructor uses `this` before `super` has returned. That's
> a no-no for pretty-good reason.
>
> If you have a better alternative design, we needed it last month. As
> things stand, this is a thing to learn, with a workaround. What's the big
> deal?
>
> /be
>
>
> Matthew Robb wrote:
>
>> If I thought I could make any money then I would most definitely bet that
>> the changes made to classes that are at the root of this problem will be
>> the undoing of es classes and I find myself feeling more and more like
>> avoiding them is the easiest thing to do.
>>
>> This use-case is a perfect example of something that is EXTREMELY
>> unexpected which is funny because the changes are supposed to be supporting
>> subclassing of built-ins.
>>
>> Very disheartened :(
>>
>>
>> - Matthew Robb
>>
>> On Tue, Jun 2, 2015 at 6:43 PM, Domenic Denicola <d at domenic.me <mailto:
>> d at domenic.me>> wrote:
>>
>>     Hmm I am pretty sure Babel et al. are correct here in not allowing
>>     this. The super call needs to *finish* before you can use `this`.
>>     Chrome also works this way.
>>
>>     The correct workaround is
>>
>>     ```js
>>     let resolve, reject;
>>     super((a, b) => {
>>       resolve = a;
>>       reject = b;
>>     });
>>
>>     // use this
>>     ```
>>
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150602/0ae1e801/attachment-0001.html>


More information about the es-discuss mailing list