absolutely, I'm working with PostgreSQL these days and indeed for any promise/awaited result this pattern looks like a win, and while it's targeting a limitation of the chaining one, it can be used in various other cases where knowing the initial result is more important than just falling back to "_dunnoWhatHappenedThere_"
On Fri, Sep 6, 2019 at 12:24 AM Michael Luder-Rosefield < [email protected]> wrote: > Another pattern it could be useful in is with, say, nosql dbs where > something might be an object or id reference: > > ``` > const fooId = foo<?.id; > ``` > > On Thu, 5 Sep 2019, 23:03 Andrea Giammarchi, <[email protected]> > wrote: > >> Another use case that I believe will be common is the following one: >> >> ```js >> // current state of the art >> const result = dbQuery(data)?.rows ?? 'did it just failed or what?'; >> >> // VS the "mice operator" >> const result = dbQuery(data)<?.rows; >> >> // if it was rows >> if (Array.isArray(result)) >> console.log(result); >> else if (result instanceof Error) >> console.error(result.message); >> else >> console.warn(`unexpected result: ${result}`); >> ``` >> >> Ideally, the "mice" should grant chaining up to its latest presence, but >> I wouldn't know right now how to reference to it ... >> >> ```js >> // if no ?? is needed, this might work >> const result = dbQuery(data)<?.rows?.data?.entry; >> >> // if ?? is needed, no idea how to back-reference the latest successfull >> "mice" result >> ``` >> >> >> >> >> On Thu, Sep 5, 2019 at 11:44 PM Tab Atkins Jr. <[email protected]> >> wrote: >> >>> On Thu, Sep 5, 2019 at 2:39 PM Andrea Giammarchi >>> <[email protected]> wrote: >>> > >>> > This is basically a solution to a common problem we have these days, >>> where modules published in the wild might have a `default` property, to >>> support ESM logic, or not. >>> > >>> > ```js >>> > // current optional chaining logic >>> > const imported = exported?.default ?? exported; >>> > >>> > // my "mice operator" proposal >>> > const imported = exported<?.default; >>> > ``` >>> > >>> > Semantically speaking, not only `<?` actually looks like a mice, it >>> also points at its previous value in case the chaining didn't work. >>> > >>> > Beside the basic example, the "mice operator" might save CPU cycles >>> when it comes to involving more complex expressions, i.e. >>> > >>> > ```js >>> > // current "solution" >>> > const thing = require('thing')?.default ?? require('thing'); >>> > >>> > // mice operator >>> > const thing = require('thing')<?.default; >>> > ``` >>> > >>> > This is also easily tranpilable, so kinda a no-brainer for modern dev >>> tools to bring in. >>> > >>> > TL;DR specially for cases where an accessed property should fallback >>> to its source, this operator might save both typing and CPU time whenever >>> it's needed. >>> >>> I find it a rather curious pattern, that I'd never seen before! Is it >>> used in anything besides this ESM-compat thing you're talking about? >>> >>> (Saving CPU cycles is not a convincing argument; it's trivial to write >>> such a line over two declarations and avoid any expensive >>> recomputations.) >>> >>> ~TJ >>> >> _______________________________________________ >> es-discuss mailing list >> [email protected] >> https://mail.mozilla.org/listinfo/es-discuss >> >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

