輸入:需要 Promise 陣列(不是必需的)
輸出:它會傳回 Promise,其中包含所有成功 Promise 的結果陣列。
注意:如果任何承諾失敗,則立即拒絕。
`
Promise.myAll = 函數(承諾){
傳回新的 Promise(函數 (解決, 拒絕) {
// 檢查輸入是否為陣列
if (!Array.isArray(promises)) {
returnreject(new TypeError("參數必須是陣列"));
}
let results = []; let completedPromises = 0; promises.forEach(function (promise, index) { // Use Promise.resolve to handle non-promise values Promise.resolve(promise) .then(function (value) { results[index] = value; completedPromises += 1; // If all promises are resolved if (completedPromises === promises.length) { resolve(results); } }) .catch(function (error) { reject(error); // Reject if any promise fails }); }); // Handle case with empty array of promises if (promises.length === 0) { resolve([]); }
});
};
`
。所有的 Promise 都已解決,並且它們的結果儲存在 results 陣列中。
。當已解決的 Promise 數量等於輸入數組的長度時,外部 Promise 將使用結果數組進行解析。
。在 Promise 陣列中,不一定所有值都必須是 Promise,它可以是任何值 - 數字、字串或任何同步函數。
如果傳遞的值已經是一個 Promise - 它將傳回相同的 Promise,確保不會發生額外的包裝或更改。
如果傳遞的值不是承諾 - 它將將該值包裝在已解決的承諾中,允許將其視為承諾並使用 .then()
這樣它就可以解析值,如果我們使用reject,它將被捕獲在catch區塊中,並且值被視為錯誤。
如果還有任何疑問,請隨時在評論中提問!
以上是Promise.all() 的 Polyfill的詳細內容。更多資訊請關注PHP中文網其他相關文章!