
promise.all() 函数
输入:需要 promise 数组(不是必需的)
输出:它返回 promise,其中包含所有成功 promise 的结果数组。
注意:如果任何承诺失败,则立即拒绝。
promise.myall() 的代码
`
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 promisesif (promises.length === 0) { resolve([]);}
});
};
`
1.如果所有promise都成功解决
。所有 promise 都得到解决,并且它们的结果存储在 results 数组中。
。当已解决的 promise 数量等于输入数组的长度时,外部 promise 将使用结果数组进行解析。
2. 为什么要使用promise.resolve()
。在 promise 数组中,不一定所有值都必须是 promise,它可以是任何值 – 数字、字符串或任何同步函数。
如果传递的值已经是一个 promise – 它将返回相同的 promise,确保不会发生额外的包装或更改。
如果传递的值不是承诺 – 它将将该值包装在已解决的承诺中,允许将其视为承诺并使用 .then()
处理它
3. 为什么使用 promise.resolve(),为什么不使用 promise.reject()
这样它就可以解析值,如果我们使用reject,它将被捕获在catch块中,并且值被视为错误。
4. 如果任何 promise 失败会发生什么?
这会触发外部promie的reject()调用,导致promise.myall()立即拒绝。foreach 循环将继续,因为它同步程序promise 的其余部分将会解析,并且它的值会添加到结果中,但是作为completedpromise!=promises.length,它不会解析,如果仍然尝试,它将被忽略,因为 promise.myall() 现在不处于待处理状态。
如果还有任何疑问,请随时在评论中提问!
以上就是Promiseall() 的 Polyfill的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1493556.html
微信扫一扫
支付宝扫一扫