promise(最全 最干净 最好用)

兄弟们!直接拿下面html浏览器跑起来耍一下吧

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        html {
            height: 100%;
        }
        body {
            display: flex;
            height: 100%;
            justify-content: center;
            align-items: start;
        }
        .box {
            width: 100px;
            height: 100px;
            text-align: center;
            line-height: 100px;
            background: #FF9800;
            color: #fff;
        }
    </style>
</head>
<body>
    <button class="box">  0 </button>
    <ul class="ul"></ul>
    <script>
        document.querySelectorAll('.box')[0].addEventListener('click', (e) => {
            new Promise(ajaxA).then(ajaxB).then(data => {
                append('数据接收')
            })
        })
        function append(item="null") {
            li= document.createElement("li");
            li.textContent=item
            document.querySelectorAll('.ul')[0].insertAdjacentElement("afterbegin",li); 
        }

        function ajaxA(resolve) {
            append('A开始----')
            setTimeout(() => {
            append('A结束+++++++++++++++++++++')
            resolve()
            }, Math.round(Math.random()*1000))
        }

        function ajaxB(resolve) {
            return new Promise((resolve, reject) => {
                append('B开始----')
            setTimeout(() => {
            append('B结束+++++++++++++++++++++')
            resolve()
            }, Math.round(Math.random()*1000))
            })

        }
    </script>
</body>
</html>

当你理解了原理之后,你就可以顺利成章了明白一些奇怪的写法的缘由,就知道顺理成章,也避免写法错误造成的bug

promise状态机

初始状态pendding

resolve改变状态为 fulfilled 就会执行后续任务 then里面的代码

决定执行后续代码的不是  resolve是否执行  是根据promisestate

then解析

then(

里面默认返回promise 且默认状态 fulfilled

解决方案 在then中 return new promise   此时then的返回状态promisestate是根据return决定的

promiseresult 是then里面的传参

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值