Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 14:44
    ahejlsberg labeled #32502
  • 14:44
    ahejlsberg labeled #32502
  • 14:44
    ahejlsberg unlabeled #32502
  • 07:35
    dmytro-gokun closed #34558
  • 04:19
    typescript-bot opened #34603
  • 04:17
    vp2177 edited #34602
  • 04:16
    vp2177 edited #34602
  • 04:11
    vp2177 edited #34602
  • 04:10
    vp2177 opened #34602
  • 00:36
    niedzielski edited #34599
  • Oct 19 23:26
    mjbvz edited #34601
  • Oct 19 23:25
    mjbvz opened #34601
  • Oct 19 20:00
    typescript-bot closed #33939
  • Oct 19 20:00
    typescript-bot closed #34271
  • Oct 19 20:00
    typescript-bot closed #34508
  • Oct 19 19:50
    typescript-bot synchronize #34600
  • Oct 19 19:30
    DanielRosenwasser synchronize #34598
  • Oct 19 19:30

    DanielRosenwasser on weakTypeChecksComparability

    Perform weak type checks when p… (compare)

  • Oct 19 19:21
    typescript-bot opened #34600
  • Oct 19 19:05
    niedzielski opened #34599
AnyhowStep
@AnyhowStep
I'm pretty sure it's not
Gareth Jones
@G-Rath
whys that?
they have the same output
AnyhowStep
@AnyhowStep
(await x) does not give you an expression of type Promise<typeof x>, I'm sure
It's just syntactic sugar
Gareth Jones
@G-Rath
Yeah, that's what I'm questioning
why doesn't it give you an expression of that type? b/c as you say, it's syntactic sugar, so it does give that expression in Node (iirc)
AnyhowStep
@AnyhowStep
If it did return a promise, this would work,
function returnPromise () : Promise<number> {
  return (await 1);
}
Gareth Jones
@G-Rath
which it does
once you add the missing async keyword
AnyhowStep
@AnyhowStep
image.png
Exactly. The async part is the problem here
Gareth Jones
@G-Rath
oh ffs
no wait what
async is in my code
for a second I thought it was I'd just missed async, but nope: async is there
so your example doesn't really relate to mine, as far as I can tell
AnyhowStep
@AnyhowStep

function takesNumberOnly (x : number) {
  console.log(x+1);
}
async function returnPromise ()  {
  const x = await 1;
  takesNumberOnly(x);
  takesNumberOnly(await 1);
}
If (await 1) is an expression of type Promise<number>
Then the second call to takesNumberOnly would not work
Gareth Jones
@G-Rath
Yeah I see. and you're right; this is turning how I figured it would
it's contextual, but too complex to type like that
AnyhowStep
@AnyhowStep
It's sytactic sugar for,
function returnPromise2 ()  {
  Promise.resolve(1)
    .then((x) => {
      takesNumberOnly(x);
      Promise.resolve(1)
        .then((y) => {
          takesNumberOnly(y);
        });
    });
}
Gareth Jones
@G-Rath
yeah yeah
AnyhowStep
@AnyhowStep
gdi gitter highlighting
Gareth Jones
@G-Rath
you need to add ts
im actually slightly disppointed in myself for not putting that together XD
but cheers for the sanity check
AnyhowStep
@AnyhowStep
Sometimes, adding ts doesn't make it any better =x
No problem <3
Gareth Jones
@G-Rath
yeah I know
but so yeah: it's b/c of the await in the inner fn
also ugh ffs my whole fn is redundant XD which is annoying b/c I thought that originally :joy:
AnyhowStep
@AnyhowStep
I didn't even notice till you said it =x
I need to up my code review skillz
Bruce Pascoe
@fatcerberus
(await 1) is expression of type number
It auto-wraps 1 in a promise and then unwraps it
You basically just waited an extra tick for a value you already had :P
AnyhowStep
@AnyhowStep
Kick him down some more :soccer:
Derya Aydede
@Derya
is async/await actually just syntactic sugar?
i was under the impression that it actually is not the exact same as the non-async equivalent

Without await, promises in for loops would be a hassle, especially if each iteration depends on the previous iteration (so no Promise.all())
I think you have to actually use a recursive function for the loop if you can't use await.

Memory is rusty and I'm too lazy to try it out

Derya Aydede
@Derya
yeah you'd have to make some nightmarish construct
thank you based async/await
Bruce Pascoe
@fatcerberus
It’s syntactic sugar as far as the behavior goes, but it being syntax makes it a lot easier to write certain constructs, like AnyhowStep says
The main advantage is you can use the value of a promise at expression-level
Whereas with .then() it’s just one step above callback hell
But other than that it's still just vanilla promise semantics under the hood, right down to the duck-typed .then
The best way to describe it is to imagine the async function is a generator, and await does something like Promise.then(x => currentGenerator.next(x)); yield;