
输入:需要 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块中,并且值被视为错误。
如果还有任何疑问,请随时在评论中提问!
以上就是Promiseall() 的 Polyfill的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号