es6:promise想到发布订阅,订阅和发布,promise的底层就是发布订阅原理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    const getJSON = function(url) {
        const promise = new Promise(function(resolve, reject){
            const handler = function() {
                // 如果readyState是4的话,会继续向下执行;
                if (this.readyState !== 4) {
                    return;
                }
                // 当前请求状态码是200;则请求成功
                if (this.status === 200) {
                    resolve(this.response);
                } else {
                    // status.Text :代表当前的错误信息;
                    // new Error :错误的一个实例;
                    reject(new Error(this.statusText));
                }
            };
            const client = new XMLHttpRequest();
            client.open("GET", url);
            client.onreadystatechange = handler;
            // 制定相应类型
            client.responseType = "json";
            // 设置请求头
            client.setRequestHeader("Accept", "application/json");
            client.send();

        });

        return promise;
    };
    // 封装Promise版的ajax;
    getJSON("aside.json").then(function (data) {
        console.log(data);
        return getJSON("",data.id);
    }).then(function (a) {
        console.log(a);
    })
    
    // then : 为promise的实例增加状态发生改变时的回调函数;
    // then: 把第一个then中的回调的返回值会传递给第二个then回调的函数的形参;
    // then : 方法中内置会返回一个新的promise的实例;但不是之前的那个promise的实例了;
    // 前面一个回调函数中如果返回一个promise的对象,那么第二个回调函数会等待第一个返回的promise实例的状态发生变化才执行;
</script>
</body>
</html>
复制代码

转载于:https://juejin.im/post/5c88839e6fb9a04a0b23080c

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值