2721. Execute Asynchronous Functions in Parallel

Difficulty:
Related Topics:
    Similar Questions:

      Problem

      Given an array of asynchronous functions functions, return a new promise promise. Each function in the array accepts no arguments and returns a promise.

      promise resolves:

      promise rejects:

      Please solve it without using the built-in Promise.all function.

      Example 1:

      Input: functions = [
        () => new Promise(resolve => setTimeout(() => resolve(5), 200))
      ]
      Output: {"t": 200, "resolved": [5]}
      Explanation:
      promiseAll(functions).then(console.log); // [5]
      
      The single function was resolved at 200ms with a value of 5.
      

      Example 2:

      Input: functions = [
          () => new Promise(resolve => setTimeout(() => resolve(1), 200)),
          () => new Promise((resolve, reject) => setTimeout(() => reject("Error"), 100))
      ]
      Output: {"t": 100, "rejected": "Error"}
      Explanation: Since one of the promises rejected, the returned promise also rejected with the same error at the same time.
      

      Example 3:

      Input: functions = [
          () => new Promise(resolve => setTimeout(() => resolve(4), 50)),
          () => new Promise(resolve => setTimeout(() => resolve(10), 150)),
          () => new Promise(resolve => setTimeout(() => resolve(16), 100))
      ]
      Output: {"t": 150, "resolved": [4, 10, 16]}
      Explanation: All the promises resolved with a value. The returned promise resolved when the last promise resolved.
      

      Constraints:

      Solution (Javascript)

      /**
       * @param {Array<Function>} functions
       * @return {Promise<any>}
       */
      var promiseAll = async function (functions) {
        return new Promise((resolve, reject) => {
          let ans = [],
            j = functions.length;
          functions.forEach((func, i) => {
            func()
              .then((res) => {
                (ans[i] = res), --j === 0 && resolve(ans);
              })
              .catch(reject);
          });
        });
      };
      
      /**
       * const promise = promiseAll([() => new Promise(res => res(42))])
       * promise.then(console.log); // [42]
       */
      

      Explain:

      nope.

      Complexity: