ES6——其它API

一、原型成员 (实例成员)

1.then

注册一个后续处理函数,当Promise为resolved状态时运行该函数

2.catch

注册一个后续处理函数,当Promise为rejected状态时运行该函数

3.finally

[ES2018]注册一个后续处理函数(无参),当Promise为已决时运行该函数

const pro = new Promise((resolve, reject) => {
    reject(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));
pro.catch(resp => console.log("catch1", resp * 1));
pro.catch(resp => console.log("catch2", resp * 2));
pro.finally(() => console.log("finally3"));
pro.finally(() => console.log("finally4"));

在这里插入图片描述

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));
pro.catch(resp => console.log("catch1", resp * 1));
pro.catch(resp => console.log("catch2", resp * 2));
pro.finally(() => console.log("finally3"));
pro.finally(() => console.log("finally4"));

在这里插入图片描述

二、构造函数成员 (静态成员)

1.resolve(数据)

该方法返回一个resolved状态的Promise,传递的数据作为状态数据

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

注意:如果传递的数据是Promise,则直接返回传递的Promise对象

const p = new Promise((resolve, reject) => {
    resolve(3);
})
// const pro = Promise.resolve(p);
//等效于
const pro = p;
console.log(pro === p);//true

2.reject(数据)

该方法返回一个rejected状态的Promise,传递的数据作为状态数据

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

在这里插入图片描述

3.all(iterable)

这个方法返回一个新的promise对象,该promise对象在iterable参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态,它会把iterable里第一个触发失败的promise对象的错误信息作为它的失败错误信息。Promise.all方法常被用于处理多个promise对象的状态集合。

function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}
const proms = [];
for (let i = 0; i < 10; i++) {
    proms.push(new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(i, "完成");
            resolve(i);
        }, getRandom(1000, 5000));
    }))
};
console.log(proms);//会先输出数组,但是Promise的状态还在等待

在这里插入图片描述
如果想确定所有Promise全部改变,就用all

function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}
const proms = [];
for (let i = 0; i < 10; i++) {
    proms.push(new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(i, "完成");
            resolve(i);
        }, getRandom(1000, 5000));
    }))
};
//等到所有的promise变成resolved状态后输出: 全部完成
const pro = Promise.all(proms)
pro.then(datas => {
    console.log("全部完成", datas);
});
console.log(proms);

在这里插入图片描述

一旦有人失败,pro.then就不会执行,会立即执行pro.catch

function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}
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);
            }
        }, getRandom(1000, 5000));
    }))
};
//等到所有的promise变成resolved状态后输出: 全部完成
const pro = Promise.all(proms)
pro.then(datas => {
    console.log("全部完成", datas);
});
pro.catch(err => {
    console.log("有失败的", err);
})
console.log(proms);

在这里插入图片描述

4.race(iterable)

当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。

function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}
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);
            }
        }, getRandom(1000, 5000));
    }))
}
//等到所有的promise变成resolved状态后输出: 全部完成
const pro = Promise.race(proms)
pro.then(data => {
    console.log("有人完成了", data);
})
pro.catch(err => {
    console.log("有人失败了", err);
})
console.log(proms);

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞羽逐星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值