News for hackers. Stuff that matters.
Re:Greppability is an underrated code metric by mewpmewp2 on Tuesday September 03, 2024 @03:33AM (#41432286)
Another benefit of using for instead of array fns is that it is easy to add await keyword should the fn become async.

But many teams will have it as a rule to always use array fns.

Re:Greppability is an underrated code metric by jappgar on Tuesday September 03, 2024 @07:09AM (#41433629)
That gives you have the option of making it serially async but not parallel, which can be achieved easily using Promise.all in either scenario.
Re:Greppability is an underrated code metric by adregan on Tuesday September 03, 2024 @09:10AM (#41434616)
As an aside: It’s way less ergonomic, but you likely want `Promise.allSettled` rather than `Promise.all` as the first promise that throws aborts the rest.
Re:Greppability is an underrated code metric by wruza on Tuesday September 03, 2024 @10:35AM (#41435385)
It doesn’t really abort the rest, it just prioritizes the selection of a first catch-path as a current continuation. The rest is still thenable, and there’s no “abort promise” operation in general. There are abort signals, but it’s up to an async process to accept a signal and decide when/whether to check it.
Re:Greppability is an underrated code metric by adregan on Tuesday September 03, 2024 @01:19PM (#41437048)
Admittedly, I was being a bit hand-wavy and describing a bit more of how it feels rather than the way it is (I'm perpetually annoyed that promises can't be cancelled), but I was thinking of the code I've seen many times across many code bases:

    let results;
    try {
      results = await Promise.all(vals.map(someAsyncOp))
    } catch (err) {
      console.error(err)
    }
While you could pull that promises mapping into a variable and keep it thenable, 99% of the time I see the above instead. Promises have some rough edges because they are stateful, so I think it might be easier to recommend swapping that Promise.all for an Promise.allSettled, and using a shared utility for parsing the promise result.

I consider this issue akin to the relationship between `sort`, `reverse`, `splice`, the mutating operation APIs, and their non mutating counterparts `toSorted`, `toReversed`, `toSpliced`. Promise.all is kind of the mutating version of allSettled.