首页 > 其他分享 >5.使用Promise实现串行

5.使用Promise实现串行

时间:2023-03-04 20:22:05浏览次数:65  
标签:resolve return 实现 res Promise 串行 new data

实现promise的核心思想是借助reduce

 第一步

const res = []
//定义一个接受不同promise执行结果的数组

第二步 返回一个promise对象

return new Promise((resolve,reject) => {     
})

第三步 通过reduce讲不同的promise进行串联执行

arr.reduce((pre,cur) => {
    return pre.then(cur).then(data => res.push(data))
},Promise.resolve()).then(() => resolve(res))

Promise.resolve(value) 方法返回一个以给定值解析后的 Promise 对象

完整代码

const funcArr = [
    () =>
        new Promise((resolve) => {
            setTimeout(() => resolve(1), 2000);
        }),
    () =>
        new Promise((resolve) => {
            setTimeout(() => resolve(2), 1000);
        }),
    () =>
        new Promise((resolve) => {
            setTimeout(() => resolve(3), 3000);
        }),
];
/**
 * @description: 实现Promise的串行
 * @param {*}: 接收一个包含多个返回Promise对象的函数的数组
 * @return {*}: 返回一个Promise对象
 */
function inOrder(arr) {
    const res = []
    return new Promise((resolve,reject) => {
        arr.reduce((pre,cur) => {
            return pre.then(cur).then(data => res.push(data))
        },Promise.resolve()).then(() => resolve(res))       
    })
}

inOrder(funcArr).then(data => console.log(data))

参考:如何控制Promise的串行执行? - 掘金 (juejin.cn)

标签:resolve,return,实现,res,Promise,串行,new,data
From: https://www.cnblogs.com/alwaysrun/p/17178991.html

相关文章

  • Hive中行列转换具体实现及应用
    1、工作应用场景统计得到每个小时的UV、PV、IP的个数,构建如下表结构:   但是表中数据的存储格式不利于直接查询展示,需要进行调整:(以时间分区,去重、聚合等……对结果......
  • 4.Promise
    1.什么是promisePromise是异步编程的一种解决方案:从语法上来讲,promise是一个对象,从他可以获取异步操作的消息;从本意上来讲。他是一个承诺,承诺他过一段时间会给你一个结果......
  • C/C++ 数据结构堆结构算法的实现
    #include<stdio.h>#include<stdlib.h>#include<string.h>//堆的算法实现#defineDEFAULT_CAPCITY128typedefstruct_Heap{int*arr;//存储堆元素的数组......
  • SpringMVC:文件上传下载如何实现?
      一、文件下载如果在响应时候没有设置响应头中的Content-Disposition属性,则会使用默认值inline,此时客户端访问静态资源的时候,能解析显示的就会解析显示,不能解析......
  • WPF MVVM动态绑定实现
    UI与后端绑定有两种方式1.在xaml的后台代码中进行设置,如下publicMainWindow(){InitializeComponent();this.DataContext......
  • 2.JavaScript如何实现异步编程,可以详细描述EventLoop机制
    单线程和异步js的任务分为同步和异步两种,它们的处理方式也不同,同步任务是直接在主线程上排队执行,异步任务则会被放在任务队列中,若有多个任务(异步任务)则要在任务队列中排......
  • Android学习-每日打卡APP-实现每日打卡
    继续写我的打卡APP-完成了每日打卡的功能,其实还是比较简单,因为和注册一样都是插入的过程同时还能实现自动计数的功能,把坚持天数自动计算出来,打卡后插入数据库效果,可以看......
  • 除数为常数的除法实现
    除数为常数的除法实现,当然除数为变量的方式是兼容常数的运算,只是针对常数运算,通常也有几种方法,供大家参考。方法一:  把除数转化为小数,采用乘法运算,比如:  a[15:0]/8'......
  • 除法的实现2
    除法的实现,相对于加减乘要麻烦一些。当然目前除法主要支持无符号数除法,我们分为两类进行介绍,一类是被除数是变量,即a/b这种,一类是被除数是常量,即a/B这种。1.被除数常量,方法......
  • Android-每日打卡APP-实现登录功能
    每日打卡APP新的进展-实现登录功能-昨天已经把注册功能实现了,今天也很快把登录功能做了出来,然后接着着手做其他功能,打卡功能写在下一篇博客能够实现登录和注册,注册相关的......