Write a function `promiseAllSettled(promises)` that waits for all promises and returns their status and value/reason.
Problem Statement
Examples
Input: promiseAllSettled([Promise.resolve(1), Promise.reject("err")])
Output: [{ status: "fulfilled", value: 1 }, { status: "rejected", reason: "err" }]
Explanation: Always resolves with status records for each promise.
Complexity
Time Complexity: O(N)
Space Complexity: O(N)
Hints
Editorial & Approach
Problem Overview & Intuition
To solve Promise.allSettled Implementation, we consider the execution characteristics of JavaScript engines. Write a function `promiseAllSettled(promises)` that waits for all promises and returns their status and value/reason. By utilizing idiomatic language constructs and clean algorithmic principles, we can accomplish this with optimal time and memory usage.
Step-by-Step Approach
- Understand Problem Contract: Identify input arguments, return type expectations, and edge cases (empty inputs, nullish values).
- Choose Core Mechanism: Use modern JavaScript patterns (unlike promise.all, this never rejects early).
- Implement Logic: Handle state and transformations efficiently (for each promise, record {status:"fulfilled", value} or {status:"rejected", reason}).
- Return Result: Ensure proper return format and preserve caller context if applicable.
Optimal Implementation (JavaScript)
function promiseAllSettled(promises) {
return new Promise(resolve => {
if (promises.length === 0) return resolve([]);
const results = [];
let count = 0;
promises.forEach((p, i) => {
Promise.resolve(p)
.then(value => { results[i] = {status:"fulfilled", value}; })
.catch(reason => { results[i] = {status:"rejected", reason}; })
.finally(() => { count++; if (count === promises.length) resolve(results); });
});
});
}
Complexity Analysis
Edge Cases & Corner Traps Handled
- Empty or boundary inputs (empty arrays, strings, zero length).
- Type checks and unexpected values (e.g.
null,undefined, negative numbers). - Closure preservation and memory isolation between separate invocations.