Promise对象学习笔记

什么是promise

Promise是一个对象,用来传递异步操作信息,解决异步操作中回调地狱的问题,一个promise构造函数resolve()和reject(),是两个函数,分别决定promise的结果;

  • resolve---内部定义成功:调用函数value =>{};

  • reject---内部定义失败:调用函数reason=>{};

  • excutor函数-----promise函数的参数:执行器(resolve,reject) =>{};

  • excutor会在promise内部立即同时调用,异步操作在执行器中执行;

创建一个promise

//要创建Promise对象,我们使用Promise构造函数
let completed = true;

let learnJS = new Promise((resolve, reject) => {
    if (completed) {
        resolve("我已经完成JS学习");
    } else {
        reject("我未完成JS学习");
    }
});

promise的三种状态

  • pending(待定状态):当promise执行还没有执行完毕的时候;

let completed = true;

let learnJS = new Promise((resolve, reject) => {
    setTimeout(() => {
        if (completed) {
            resolve("我已经完成JS学习");
        } else {
            reject("我未完成JS学习");
        }
    }, 5 * 1000);
});

console.log(learnJS);
//输出:Promise {<pending>}
  • fulfilled(操作成功):当promise执行了resolve;

//5s后打印
console.log(learnJS);
//输出:Promise {<fulfilled>: '我已经完成学习'}
  • rejected(操作失败):当promsie执行了reject;

当promise的状态变为成功或失败后,状态是不能再改变的;

promise的链式写法

then函数会返回一个新的promise,因此可以使用链式写法链接then函数,每一个then中promise的结果会交给下一个then来处理。

promise.then(
  //handlePromise
).then(
  //handlePromise
).then(
  //handlePromise
).then(
  //handlePromise
)

如果then中没有第二个处理reject的函数的话链式调用会直接进行下一轮的操作,如果省略then函数中所有的第二个处理reject的函数,那就可以在链式调用的最后写catch来处理所有链式调用中发生的所有错误。

promise.then(
    // handleResolvedA
).then(
    // handleResolvedB
).then(
    // handleResolvedC
).then(
    // handleResolvedD
).catch(err => console.log(err)) // 统一错误处理

then、catch、finally

1)then()

  • 用来设置promise变成resolved成功状态时的回调

  • 可传入两个回调函数,onRejected用来设置rejected失败时的回调

promiseObject.then(onFulfilled, onRejected);
//写个函数返回promise对象
function makePromise(completed) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (completed) {
                resolve("我已经完成JS学习");
            } else {
                reject("我未完成JS学习");
            }
        }, 5 * 1000);;
    });
}
//把上面的learnJS改成用函数来返回,接着用then来设置相应的回调函数
let learnJS = makePromise(true);

learnJS.then(
    success => console.log(success),
    fail => console.log(fail)
);

// 5秒后输出:我已经完成JS学习

2)catch()

  • catch()用来设置promise变成rejected失败时的回调

let learnJS = makePromise(false);

learnJS.catch(
    fail => console.log(fail)
);

// 5秒后输出:我未完成JS学习

3)finally()

  • 设置无论promise变成resolved/rejected成功或是失败都会执行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值