Parallel calls on back end, forkJoin or Promise.all

Is there a preference for the Apex environment for using forkJoin vs Promise.all for doing parallel operations (say from a business object behavior?

AI reports the following differences, and it seems like forkJoin is superior if you want to catch individual errors that might occur in the things you’re running in parallel, in order to take some action, etc.
===from AI engine:
Both forkJoin from RxJS and Promise.all are used to handle multiple asynchronous operations in parallel, but they are designed for different contexts and have some key differences. Here’s a comparison of the two:

1. Type of Asynchronous Operations

  • forkJoin:

    • Works with Observables, which are part of the RxJS library.
    • Suitable for Angular applications where you are already using Observables for HTTP requests and other asynchronous operations.
    • Emits the last value from each observable when all observables complete.
  • Promise.all:

    • Works with Promises, which are a standard JavaScript feature.
    • Can be used in any JavaScript environment, not just Angular.
    • Resolves when all promises are fulfilled or rejects if any promise is rejected.

2. Error Handling

  • forkJoin:

    • If any observable errors out, the entire forkJoin will error out, and you can handle it in the subscription.
    • You can use operators like catchError to handle errors for individual observables before they reach forkJoin.
  • Promise.all:

    • If any promise is rejected, Promise.all will reject immediately, and you can handle the error in the .catch() method.
    • You cannot catch errors for individual promises within Promise.all without additional handling.

3. Return Values

  • forkJoin:

    • Returns an observable that emits an array of the last emitted values from each observable when all observables complete.
    • You need to subscribe to the observable to get the results.
  • Promise.all:

    • Returns a single promise that resolves to an array of the results of the input promises.
    • You can use .then() to access the results directly.

4. Use Cases

  • forkJoin:

    • Best used in Angular applications where you are already working with Observables, especially for HTTP requests.
    • Ideal when you want to combine multiple API calls and reactively handle the results.
  • Promise.all:

    • Suitable for any JavaScript code where you are working with promises, such as in Node.js or vanilla JavaScript applications.
    • Good for scenarios where you want to run multiple asynchronous tasks in parallel and wait for all of them to complete.