JS 异步编程与Promise async await语法糖

js任务队列链接
js是一直在轮训一个主任务队列其他任务做完之后js再去任务队列里面轮训,有的话就执行
Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。

promise个状态方法里面的任务是微任务 主线程里面的动作是宏任务,只有等宏任务里面的代码都执行完了,轮训的时候才能拿到微任务,
在这里插入图片描述
所以这段代码的输出才是先输出123 再输出成功处理的业务.

在这里插入图片描述
同理,虽然console.log(“234”)在微任务之后,但是他在里面也相当于是宏任务,也会比resolve要先执行 这个执行的顺序得搞清楚

在这里插入图片描述
promise的状态是单向的不可逆的
这个地方调了成功和失败两个,但是在规则上他只能是调取一个,状态的设置是不可逆的,所以只能够调用前面的那个

用promise封住定时器

    function timeout(delay = 1000) {
        return new Promise(resolve => { setTimeout(resolve, delay) })
    }

    timeout(2000).then(() => {
        console.log("123")
    })

使用Map实现promise队列

    function queue(num) {
        let promise = Promise.resolve();
        num.map(v => {
            promise = promise.then(_ => {
                return new Promise(resolve => {
                    setTimeout(() => {
                        console.log(v)
                        resolve()
                    }, 1000);
                });
            })
        })
    }

async就相当于promise 而await就相当于 then
整个的内部是一样的只是表现的形式不一样了而已
需要注意的是async指定了函数 才能在那个函数里面写await

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值