Re:I Avoid Async/Await
by Aeolun on Saturday April 16, 2022 @08:53AM
(#31051917)
Is there anyone that actually likes this structure? I find it really hard to reason about what a line like this does. What is the upper limit on double arrows in one line?
[ Parent
| on HN ]
here's a real world example I use all the time:
const wait = (ms = 500) => new Promise(resolve => setTimeout(resolve, ms));
then: async function () {
await wait(1000);
}
Perhaps it's hard to grok but it sure is a handy one-liner.Of course in newer versions of node we can now do:
import {
setTimeout,
} from 'timers/promises';
await setTimeout(100);There's no merit of what should be a project wide function being a single line instead of 3 to avoid "hard to grok" syntax.
Wait till you see the rest of javascript...
Re:I Avoid Async/Await
by eurasiantiger on Saturday April 16, 2022 @05:36PM
(#31056304)
Your comment is snarky and categorically dismissive. Care to explain why you have taken such an aggressive stance against JS?
this works in older versions of node too:
const wait = require(‘util’).promisify(setTimeout)
but not in the browser
Re:I Avoid Async/Await
by eurasiantiger on Saturday April 16, 2022 @09:39AM
(#31052223)
It’s the cleanest way to wrap a event-emitting library, for example. async/await is not applicable in such a case where resolve needs to be explicitly called in a callback.
async function process() {
return new Promise((resolve, reject) => {
emitter.on(”error”, (err) => reject(err));
emitter.on(”end”, (result) => resolve(result));
emitter.start();
});
}
async is not strictly needed here, but I find it a good practice to use it on functions which immediately return a Promise anyway.I don't think it's a good practice, atleast if you have typescript jn your stack. It's redundant and wraps the promise in another promise.
Re:I Avoid Async/Await
by eurasiantiger on Saturday April 16, 2022 @11:14AM
(#31052947)
IIRC that doesn’t actually happen if a native Promise is returned.
Re:I Avoid Async/Await
by eyelidlessness on Saturday April 16, 2022 @12:33PM
(#31053727)
It does, but only if you also add a redundant await. Which I still do, even in TypeScript, unless there’s a compelling performance reason not to. I disagree with the article overall, but I do agree that making asynchrony as explicit as possible is a good idea. Otherwise you end up with code like:
async function foo(bar) {
// ...
}
function nonObviousAsyncFn() {
// ...
return foo(quux);
}
Explicit return types would help, but most people don’t write them unless they’re forced by a linter.This would still return a promise for both functions. My IDE at least is really obvious about what happens.
Re:I Avoid Async/Await
by eurasiantiger on Sunday April 17, 2022 @03:24AM
(#31059155)
Yes, this is a common anti-pattern
return await foo();Your gripe is that there are two arrows on one line? The second is an argument to the promise constructor. You should be able to reason about this line easily.
I think I was unclear. Of course you can figure out what the line does. It’s just that you have to figure it out.