问答题841/1593实现mergePromise函数

实现mergePromise函数,把传进去的数组按顺序先后执行,并且把返回的数据先后放到数组data中。

1const time = (timer) => { 2 return new Promise(resolve => { 3 setTimeout(() => { 4 resolve() 5 }, timer) 6 }) 7} 8const ajax1 = () => time(2000).then(() => { 9 console.log(1); 10 return 1 11}) 12const ajax2 = () => time(1000).then(() => { 13 console.log(2); 14 return 2 15}) 16const ajax3 = () => time(1000).then(() => { 17 console.log(3); 18 return 3 19}) 20 21function mergePromise () { 22 // 在这里写代码 23} 24 25mergePromise([ajax1, ajax2, ajax3]).then(data => { 26 console.log("done"); 27 console.log(data); // data 为 [1, 2, 3] 28}); 29 30// 要求分别输出 31// 1 32// 2 33// 3 34// done 35// [1, 2, 3] 36
难度:
2022-01-09 创建

参考答案:

这道题有点类似于Promise.all(),不过.all()不需要管执行顺序,只需要并发执行就行了。但是这里需要等上一个执行完毕之后才能执行下一个。

解题思路:

  • 定义一个数组data用于保存所有异步操作的结果
  • 初始化一个const promise = Promise.resolve(),然后循环遍历数组,在promise后面添加执行ajax任务,同时要将添加的结果重新赋值到promise上。
1function mergePromise (ajaxArray) { 2 // 存放每个ajax的结果 3 const data = []; 4 let promise = Promise.resolve(); 5 ajaxArray.forEach(ajax => { 6 // 第一次的then为了用来调用ajax 7 // 第二次的then是为了获取ajax的结果 8 promise = promise.then(ajax).then(res => { 9 data.push(res); 10 return data; // 把每次的结果返回 11 }) 12 }) 13 // 最后得到的promise它的值就是data 14 return promise; 15}

最近更新时间:2024-07-20

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!