zoukankan      html  css  js  c++  java
  • 手写Promise/Promise.all/promise.race

    转载自:https://www.bilibili.com/read/cv7483834/

    Promise

                 class Promise1{
                     state='pending'
                     succeed=null
                     fail=null
                    constructor(fn){
                        fn (this.resolve.bind(this),this.reject.bind(this)){
                            
                        }
                    }
                    resolve(result){
                        setTimeout(()=>{
                            this.state='fulfilled'
                            this.succeed(result)
                        })
                    }
                    reject(reason){
                        setTimeout(()=>{
                            this.state='rejected'
                            this.fail(reason)
                        })
                    }
                    then(succed,fail){
                        this.succed=succeed
                        this.fail=fail
                    }
                    
                }

    promise.all

    方法会返回一个Promise实例此实例在iterable参数内所有的promise都完成(resolved)时回调完成(resolve);如果参数中promise有一个失败(rejected),此实例回调失败(reject),失败的原因时第一个失败promise的结果。

        Promise1.all=function(arr){
                    let list=[];
                    let len=0;
                    hasErr=false;
                    return new Promise1((rrsolve,reject)=>{
                        for(let i=0;i<arr.length;i++){
                            arr[i].then(data=>{
                                list[i]=data
                                len++
                                len===arr.length&&resolve(list)
                            }.error=>{
                                !hasErr&&reject(error)
                                hasErr=true
                            })
                        }
                    })
                }

    Promise.race

    方法返回一个promise实例,一旦迭代器的某个promise完成(resolved)或失败(rejected),返回的promise就会resolve或reject。

          Promise1.race=function(arr){
                    let hasValue=false
                    let hasError=false
                    return new Promise1((rrsolve,reject)=>{
                        for(let i=0;i<arr.length;i++){
                            arr[i].then(data=>{
                                !hasValue&&!hasError&&resolve(data)
                                hasValue=true
                            }.error=>{
                               !hasValue&&!hasError&&reject(error)
                               hasError=true
                            })
                            
                          }
                     })
                  }
  • 相关阅读:
    Spring 源码学习
    Feign Client 原理和使用
    算法基础:排序算法看这一篇就够了
    Spring 源码学习2
    Spring 源码学习
    最优包裹组合-贪心算法
    @Transactional 事务的底层原理
    Mysql索引扫盲总结
    snowflake原理解析
    分布式ID总结
  • 原文地址:https://www.cnblogs.com/babilong/p/13631296.html
Copyright © 2011-2022 走看看