I just looked at: flex-typedefs/target/generated-sources/externc/classes/Promise.as flex-typedefs/target/generated-sources/externc/interfaces/IThenable.as
It looks like Promise does implement Ithenable. I don't think we are currently using es6. -Alex On 11/16/16, 3:04 PM, "Harbs" <harbs.li...@gmail.com> wrote: >It seems to me that the extern is wrong. According to MDC, the return >type for all Promise methods should be of type Promise.[1] > >Maybe Promise should implement IThenable (and possibly ICatchable), but I >think Promise should return Promise. > >How do we patch the js files? > >I could also try to make a pull request and/or open an issue on their >extern. My last pull request for node externs was accepted. > >Thoughts? > >[1]https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Globa >l_Objects/Promise/then >On Nov 17, 2016, at 12:42 AM, Josh Tynjala <joshtynj...@gmail.com> wrote: > >> Based on that really strange @template tag, Object is definitely the >> correct response from externc. Google seems to be doing something >>advanced >> there that I'm not even sure is documented. >> >> I also don't think we want to try to parse that mess. If we want it to >> return IThenable or something, then we need to apply a patch file, >>similar >> to other changes that we make. >> >> - Josh >> >> On Wed, Nov 16, 2016 at 2:26 PM, Harbs <harbs.li...@gmail.com> wrote: >> >>> >>> On Nov 16, 2016, at 11:20 PM, Alex Harui <aha...@adobe.com> wrote: >>> >>>> >>>> >>>> On 11/16/16, 11:07 AM, "Harbs" <harbs.li...@gmail.com> wrote: >>>> >>>>> >>>>> So you are suggesting to make it a top-level class. Right? Otherwise >>>>> we’re not good to go. >>>>> >>>>> Another problem with the definition in js.swc is that then() returns >>>>>an >>>>> Object, while it should really return a Thenable. I don’t think >>>>>Thenable >>>>> is defined as an interface in JS. >>>> >>>> You can use patch files and missing.js to tweak the API if you need >>>>to. >>> >>> I’m a bit confused by where the types are being picked up from. js.swc >>> definitely gets them, and it looks like it’s getting them from es6.js. >>>I >>> see that there actually is an IThenable which is a defined type, >>>although >>> IThenable only has a then() method and not a catch() method. >>> >>> One thing which is throwing me off is the fact that es6.as defines >>> Promise.resolve() like this: >>> /** >>> * @param {VALUE=} opt_value >>> * @return {RESULT} >>> * @template VALUE >>> * @template RESULT := type('Promise', >>> * cond(isUnknown(VALUE), unknown(), >>> * mapunion(VALUE, (V) => >>> * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), >>> * templateTypeOf(V, 0), >>> * cond(sub(V, 'Thenable'), >>> * unknown(), >>> * V))))) >>> * =: >>> */ >>> Promise.resolve = function(opt_value) {}; >>> >>> I have no clue what all this template stuff means, but the js.swc is >>> expecting an Object as the return type. >>> >>> Promise.reject() has a return type of Promise which seems more correct >>>to >>> me. Is Promise.resolve() broken, and if yes, how do we fix it? >>> >>>> >>>>> >>>>>> IMO, polyfills should be beads you add to your Application beads if >>>>>>you >>>>>> need them. >>>>> >>>>> Makes sense, although I’m not sure what the bead would look like. >>>>> I think manually adding a polyfill for I.E. in the HTML is a >>>>>reasonable >>>>> work-around as well. >>>> >>>> The bead would use <inject_html> >>>> >>>> -Alex >>>> >>> >>> >