I understand why 'all done' comes first, but the console.log's all print as expected. of course they come after 'all done', but the article and the link don't explain why the console.logs wouldn't work, because it appears they do. It might be because the linked article used a preproduction v 7 node where async/await/promises weren't quite working. or something.
Yeah, I see the same behaviour as you in Node 8, so it's possible the console.log issue is related to Node7.
But it wasn't the problem that I was hoping to highlight (my bad!), which is that it doesn't behave as you'd expect when you await sleep(50) inside an async function. It has stung me in the past where we had something along the lines of
xs.forEach(async (x) => {
const result = await doSomething(x);
// do something with results
})
doSomethingElseAfterAllResultsAreProcessed();
which fails because by the time doSomethingElseAfterAllResultsAreProcessed runs the results haven't actually been processed in the forEach. Once you understand the problem it's easy to see why it behaved that way, but it wasn't intuitive as the time of writing the code (which is why I actually made this mistake multiple times before I eventually "learnt the lesson").
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
const sleep = (ms) => new Promise(r => setTimeout(r, ms)); // from the linked post
[1, 2, 3].forEach(async (num) => {
await sleep(50);
console.log(num);
});
console.log('all done');
prints:
F:\projects>node x.js
Done
1
2
3
F:\projects>
I understand why 'all done' comes first, but the console.log's all print as expected. of course they come after 'all done', but the article and the link don't explain why the console.logs wouldn't work, because it appears they do. It might be because the linked article used a preproduction v 7 node where async/await/promises weren't quite working. or something.
node 10.x
Yeah, I see the same behaviour as you in Node 8, so it's possible the
console.log
issue is related to Node7.But it wasn't the problem that I was hoping to highlight (my bad!), which is that it doesn't behave as you'd expect when you
await sleep(50)
inside anasync
function. It has stung me in the past where we had something along the lines ofwhich fails because by the time
doSomethingElseAfterAllResultsAreProcessed
runs the results haven't actually been processed in theforEach
. Once you understand the problem it's easy to see why it behaved that way, but it wasn't intuitive as the time of writing the code (which is why I actually made this mistake multiple times before I eventually "learnt the lesson").