Promise的三种调度

68 阅读1分钟

共荣期约 ----Promise.all()

 <script>
        
        ~function PromiseAll(){
            Promise.all(
                [
                    Promise.resolve(100),
                    56,
                    new Promise(
                        (resolve,reject) =>{

                            // 这是定时器的使用了第三个参数的写法
                            // setTimeout(resolve,3000,'你还是去小孩那桌吧!')
                            
                            // 正规写法
                            setTimeout(
                                ()=> reject("你还是去小孩那桌吧!"),3000
                            )
                        }
                    )
                ]
            ).then(data =>console.log(data))
            .catch(err =>console.log('err='+err))
        }()
  
    </script>
  • 总结: 输入和输出都是数组 Promise.all()这个调度特点:全部是履约状态时(等全部履约成功时,输出一个数组内容),若不全是履约状态时,则返回失约内容(不会输出履约内容)

全部落地尘埃---Promise.allSettled()

 <script>
        ~function PromiseAllSettled() {
            Promise.allSettled(
                [
                    Promise.resolve(100),
                    56,
                    new Promise(
                        (resolve, reject) => {

                            // 这是定时器的使用了第三个参数的写法
                            // setTimeout(resolve,3000,'你还是去小孩那桌吧!')

                            // 正规写法(两个参数)
                            setTimeout(
                                () => reject("你还是去小孩那桌吧!"), 3000
                            )
                        }
                    )
                ]
            )
                .then(data => console.log(data))
                .catch(err => console.log('err=' + err))

                // 查询出来的结果
            // (3)[{… }, {… }, {… }]
            // 0: { status: 'fulfilled', value: 100 }
            // 1: { status: 'fulfilled', value: 56 }
            // 2: { status: 'rejected', reason: '你还是去小孩那桌吧!' }
            // length: 3
            // [[Prototype]]: Array(0)

                        // 这是查询状态
            // .then(data => data.forEach(data =>console.log(data.status)))

        }()
    </script>
  • 总结:输入/输出都是数组形式 ,将所有的promise的值都输出(不管是履约还是毁约)

谁是promise的第一个值就输出内容

<script>
        ~function PromiseRace(){
            Promise.race(
                [
                    new Promise(
                        (resolve,reject)=>{
                            setTimeout(
                                ()=>resolve(10),10000
                            )
                        }
                    ),
                    new Promise(
                        (resolve,reject)=>{
                            setTimeout(
                                ()=>reject(100),1000
                            )
                        }
                    )
                ]
            ).then(
                data =>console.log(data)//Uncaught (in promise) 100
            )
        }()
       
    </script>
  • 总结:输入的是数组,输出的失约或履约的内容(谁的为promise的值就输出那个例如:10000>1000,所以输出的是失约的内容)