登录
首页 >  文章 >  前端

Promiseall() 的 Polyfill

来源:dev.to

时间:2024-10-26 21:49:25 132浏览 收藏

积累知识,胜过积蓄金银!毕竟在文章开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《Promiseall() 的 Polyfill》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

Promiseall() 的 Polyfill

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 promises
if (promises.length === 0) {
  resolve([]);
}

});
};
`

1.如果所有promise都成功解决

。所有 promise 都得到解决,并且它们的结果存储在 results 数组中。
。当已解决的 promise 数量等于输入数组的长度时,外部 promise 将使用结果数组进行解析。

2. 为什么要使用promise.resolve()

。在 promise 数组中,不一定所有值都必须是 promise,它可以是任何值 - 数字、字符串或任何同步函数。

  1. 如果传递的值已经是一个 promise - 它将返回相同的 promise,确保不会发生额外的包装或更改。

  2. 如果传递的值不是承诺 - 它将将该值包装在已解决的承诺中,允许将其视为承诺并使用 .then()

  3. 处理它

3. 为什么使用 promise.resolve(),为什么不使用 promise.reject()

这样它就可以解析值,如果我们使用reject,它将被捕获在catch块中,并且值被视为错误。

4. 如果任何 promise 失败会发生什么?

  1. 这会触发外部promie的reject()调用,导致promise.myall()立即拒绝。
  2. foreach 循环将继续,因为它同步程序
  3. promise 的其余部分将会解析,并且它的值会添加到结果中,但是作为completedpromise!=promises.length,它不会解析,如果仍然尝试,它将被忽略,因为 promise.myall() 现在不处于待处理状态。

如果还有任何疑问,请随时在评论中提问!

今天关于《Promiseall() 的 Polyfill》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:dev.to 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>