JavaScript Promise解析一个例子就够了


前言

Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。

一个例子即可让你逐步运用熟悉!


`

一、Promise构造函数

es5写法

new Promise(function (resolve, reject) {
    // 要做的事情...
});

es6写法

new Promise( (resolve, reject)=>{
    // 要做的事情...
});

Promise 构造函数只有一个参数,是一个函数,这个函数在构造之后会直接被异步运行,我们称之为起始函数。起始函数包含两个参数 resolve 和 reject。

resolve:执行成功的返回值,如:resolve(‘执行成功’)
reject:执行失败的返回值,如:reject(‘执行失败’)

注意:new promise(fn)一旦创建就会直接执行函数,不需要调用,所以一般写在函数内部,再进行调用函数,见下面例子!

二、一个例子

例子可以直接放进JavaScript测试

异步编程promise的测试函数

//隔1秒打印promise ce1
function ce1() {
    console.log('开始执行ce1')
    let p = new Promise((rv, rf) => {
        setTimeout(() => {
            console.log('promise ce1')
            rv('A'); //执行成功后继传递数据
        }, 1000);
    })
    //返回promise对象以便进行then的链式操作
    return p;
}
//隔2秒打印promise ce2
function ce2() {
    console.log('开始执行ce2')
    let p = new Promise((rv, rf) => {
        setTimeout(() => {
            console.log('promise ce2')
            rv('B'); //执行成功后继传递数据
        }, 2000);
    })
    return p;
}
//隔3秒打印promise ce3
function ce3() {
    console.log('开始执行ce3')
    let p = new Promise((rv, rf) => {
        setTimeout(() => {
            console.log('promise ce3')
            rv('C'); //执行成功后继传递数据
        }, 3000);
    })
    return p;/
}

1、按异步操作先后顺序执行的2种方式

//顺序异步执行方式1:
//then表示前面异步函数体执行完毕后再执行后面的异步函数
//e表示从前面异步操作返回的fv返回值,也可以不要返回值直接进行后面函数体的执行
 ce3().then(e => {
         console.log(e + 'a')
         return ce1();
    }).then(e => {
        console.log(e + 'b')
         return ce2();
    }).catch(err => {  
//catch:错误抓取打印,跟fv功能类似,错误时不报错直接执行下面的函数体
        console.log(err)
    })


// 顺序执行异步2:
//异步函数标记async,函数内用await promise函数,顺序执行
async function as() {
     await ce3();
     await ce1();
     await ce2();
 }
 as();

·执行结果执行结果

2、Promise.all([promise1(),...]):
异步操作多项并行:异步操作都会同时执行,都执行完毕后,再进行后面的then抓取所有异步操作的返回值rv1,rv2,rv3…,返回数组

 Promise.all([ce1(), ce2(), ce3()]).then(e => {
     console.log(e)
 })

执行结果在这里插入图片描述

3、Promise.race([promise1(),...]):
优先完成执行:异步操作都会同时执行,但then只会抓取最快执行完毕的异步操作的返回值

 Promise.race([ce1(), ce2(), ce3()]).then(e => {
     console.log(e)
 })

执行结果在这里插入图片描述

三、总结

有什么问题都可以在评论区交流哦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一路向前的小Q

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

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

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

打赏作者

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

抵扣说明:

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

余额充值