9

an example:

async doSomething() {
  await asyncCall();
}

Do I need to use await when I call my doSomething function?

await doSomething();

or is this fine?

doSomething();
avokevdo
  • 119
  • 4
  • 1
    Do you want to wait for `doSomething()` to finish or not? Do you want to handle any errors it might throw? – VLAZ Jun 04 '21 at 20:35
  • @VLAZ Yes, I do want to wait for `doSomething()` to finish – avokevdo Jun 04 '21 at 20:36
  • then you need `await`. if you want to run it *in the background* and not wait you dont use `await`. – Lux Jun 04 '21 at 20:36
  • 2
    Then...you have to `await` it. That's what `await` does. – VLAZ Jun 04 '21 at 20:36
  • [An `async function` *always* returns a promise](https://stackoverflow.com/q/35302431/1048572), regardless whether you use `await` in the body or not, and yes you will need to `await` (or `return`) that promise. – Bergi Jun 04 '21 at 21:09

2 Answers2

6

It's important to understand that async/await is really just "sugar" on top of Promises. In other words, doSomething still returns a Promise (you can't use async await to get away from this fact!). So, to answer your question, you still need to use await (or chain a then call) to handle the eventual resolved or rejected Promise value.

Nick
  • 16,066
  • 3
  • 16
  • 32
2

In your example, doSomething() returns a Promise. For you to return the data from an async function, you need to resolve or reject the promise.

When you do:

await doSomething();

doSomething() will wait for asyncCall() to be resolved.

When you do:

doSomething();

doSomething() will resolve asyncCall()in the background.

I think your confusion comes from the fact that await is only valid in async functions in javascript. If you want to run await doSomething() outside a async function, just wrap it around an anonymous async function like:

(async() => {
  await doSomething()
})();
toing_toing
  • 2,334
  • 1
  • 37
  • 79