手写 Promise.all

80 阅读1分钟

重点

  1. 知道要在 Promise 上写而不是在原型上写
  2. 知道 all 的参数(Promise 数组,数组用list表示)和返回值(新 Promise 对象)
  3. 知道用数组来记录结果 (const results = []
  4. 知道只要有一个 reject 就整体 reject

示例代码如下:

Promise.myAll = function(list){
const results = []
let count = 0
return new Promise((resolve,reject)=>{
list.map((promise,index)=>{
promise.then((r)=>{
results[index] = r
count += 1
if(count === list.length){
resolve(results)
}
},(reason)=>{
reject(reason)
})
})
}) 

实现斐波那契数列的计算:

斐波那契数列是指这样一个数列:0、1、1、2、3、5、8、13、21、34、……,这个数列从第三项开始,每一项都等于前两项之和。也就是说,第n项可以通过以下公式计算得到:F(n) = F(n-1) + F(n-2),其中F(0) = 0,F(1) = 1。

斐波那契数列具有许多有趣的性质和应用,例如在自然界中广泛存在,如树叶、植物的分布、兔子繁殖等。同时,它也被广泛应用于算法、编程、数学等领域中,例如排序算法、图像处理、密码学等。

斐波那契数列(Fibonacci sequence)及相关结论 - 知乎 (zhihu.com)

斐波那契数列的时间复杂度_斐波那契数列时间复杂度_想上天的狗的博客-CSDN博客

以下是一个使用斐波那契数列的计算实现Promise.all()方法的JavaScript代码示例:

function fibonacci(n) {
  if (n === 0) {
    return Promise.resolve(0);
  } else if (n === 1) {
    return Promise.resolve(1);
  } else {
    return Promise.all([fibonacci(n - 1), fibonacci(n - 2)]).then(values => {
      return values[0] + values[1];
    });
  }
}

Promise.all([fibonacci(8), fibonacci(9)]).then(values => {
  console.log(values); // 输出 [10, 17]
});