Promise,async和await的理解笔记

// ------------------------------------------------------------Promise------------------------------------------------------------
function f1 () {
    return new Promise((resolve, reject) => {
        
        setTimeout(() => {
            console.log("我是老大:我执行完了.你们后面继续吧.");
            resolve()
        }, 2000);
    })
}

function fx () {
    setTimeout(() => {
        console.log("我是普通程序:但我也比较耗时.你会等我执行完了再执行么?");
    }, 2000);
}

function f2 () {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log("我是老二:当然会了,因为链式调用会阻塞程序啊.我可是等你执行完了再执行的.");
            resolve()
        }, 2000);
    })
}

function f3 () {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log("我是老三:但我想提前结束程序了,不让老四执行,可以么?");
            reject("老三提前终结!")
        }, 2000);
    })
}

function f4 () {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log("我是老四:总有刁民想害朕,你以为你能得逞么?");
            resolve()
        }, 2000);
    })
}

f1().then(fx)
    .then(f2)
    .then(f3)
    .then(f4)
    .catch(e => {
        console.log("报错了啊", e)
    })

PS:根据上述代码执行情况:

new Promise()的链式调用中.(Promise会阻塞执行,但普通方法是不会的.fx是和f2同时打印的执行结果.说明fx只是启动了定时器,但是并没有等待定时器执行完毕就去执行了f2)

1.如果是普通方法,你执行完了代码.就会进入到下一个then中,但并不会阻塞等待.

2.如果你也是Promise,则只有你调用resolve,或者reject,才会进入到下一个then中.

在链式调用中,任何节点都可以提前reject.直接跳到结束.

 

// ------------------------------------------------------------async && await------------------------------------------------------------
function needTime () {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log("我比较耗时,所以...你等我了么?");
            resolve()
        }, 2000);
    })
}

function test1(){
    needTime()
    console.log("我会等你么?");
}

async function test2 () {
    await needTime()
    console.log("我会等你么?");
}

console.log("第一次测试");
test1()



console.log("第二次测试");
test2()

在这个例子中,没有加async的方法会先打印,根本不会阻塞等待needTime的执行.
但是有async的方法会阻塞等待needTime执行完毕后,才会打印.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

就是那个马冰冰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值