es6的promise讲解(3)

promise的其他api

实例成员

  • then:注册一个后续处理函数,当promise为resolved状态时运行该函数
  • catch:注册一个后续处理函数,当promise为rejected状态时运行该函数
  • finally:【es2018】注册一个后续处理函数(无参),当promise为已决时运行该函数

静态成员

  • resolved(数据):该方法返回一个resolved状态的promise,传递的数据作为状态数据。特殊情况:如果传递的数据是promise,则直接返回传递的promise对象。
  • reject(数据):该方法返回一个rejected状态的Promise,传递的数据作为状态数据
  • all(可迭代的数据):这个方法返回一个新的promise对象,该对象在可迭代的参数对象里所有的promise都成功后,才会触发执行then,如果有一个失败,就立即触发失败的promise处理。这个新的promise对象在触发成功状态后,会把所有的promise成功的返回值的数组作为成功回调的返回值,如果失败,会把第一个失败的promise对象的错误信息作为它的错误信息。
  • race(可迭代的数据):当可迭代的参数里的任何一个子promise成功或者失败后,父promise也会马上用子promise的处理结果作为参数调用本身的函数,并返回自己的promise对象。

例子

  • 1.finally
const pro = new Promise((resolve, reject)=>{
        resolve(1);
})
     pro.finally(()=>console.log('finally1'));
     pro.finally(()=>console.log('finally2'));
     pro.then(resp=>console.log('then1', resp*1));
     pro.then(resp=>console.log('then2', resp*2));

在这里插入图片描述

const pro = new Promise((resolve, reject)=>{
         reject(1);
})
     pro.finally(()=>console.log('finally1'));
     pro.finally(()=>console.log('finally2'));
     pro.catch(resp=>console.log('catch1',resp*1));
     pro.catch(resp=>console.log('catch2',resp*2));

在这里插入图片描述

  • 2静态成员
const pro = new Promise((resolve, reject)=>{
            resolve(1);
})
// 等效于
const pro = Promise.resolve(1);

console.log(pro.then(resp=>console.log(resp*100)));

在这里插入图片描述

const pro = new Promise((resolve, reject)=>{
            reject(1);
})
// 等效于
const pro = Promise.reject(1);

console.log(pro.catch(err=>console.log(err*100)));

在这里插入图片描述

const p = new Promise((resolve, reject)=>{
            resolve(3);
})

const pro = Promise.resolve(p);
// 等效于
const pro = p;

console.log(pro === p);

在这里插入图片描述

  • 3.all
const proms = [];
for(let i = 0; i < 10; i++){
    proms.push(new Promise((resolve, reject)=>{
         setTimeout(()=>{
             if(Math.random() < 0.5){
                console.log(i, '完成');
                resolve(i);
                 }else{
                   console.log(i, '失败');
                   reject(i);
                  }
         }, 1000);
     }))
 }
        // 等所有的promise变成resolved状态后输出:全部完成
        const pro = Promise.all(proms);
        pro.then(datas=>{
            console.log('全部完成', datas);
        })
        pro.catch(err =>{
            console.log('有失败的', err);
        })
        console.log(proms);

在这里插入图片描述
在这里插入图片描述

const proms = [];
        for (let i = 0; i < 10; i++) {
            proms.push(new Promise((resolve, reject) => {
                setTimeout(() => {
                    if (Math.random() < 0.5) {
                        console.log(i, "完成");
                        resolve(i);
                    } else {
                        console.log(i, "失败")
                        reject(i);
                    }
                }, 1000);
            }))
        }
        // 只要有一个完成,就立马输出 有一个失败也立马输出
        const pro = Promise.race(proms)
        pro.then(data => {
            console.log("有promise成功了", data);
        },err => {
            console.log("有promise失败了", err);
        })
        console.log(proms);

在这里插入图片描述
在这里插入图片描述
讲解1
讲解2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值