美文网首页
前端基础ES6-promise异步编排

前端基础ES6-promise异步编排

作者: 让你变好的过程从来都不会很舒服 | 来源:发表于2024-01-03 17:21 被阅读0次

    在 JavaScript 的世界中,所有代码都是单线程执行的。由于这个“缺陷”,导致 JavaScript 的所
    有网络操作,浏览器事件,都必须是异步执行。异步执行可以用回调函数实现。一旦有一连
    串的 ajax 请求 a,b,c,d... 后面的请求依赖前面的请求结果,就需要层层嵌套。这种缩进和层
    层嵌套的方式,非常容易造成上下文代码混乱,我们不得不非常小心翼翼处理内层函数与外
    层函数的数据,一旦内层函数使用了上层函数的变量,这种混乱程度就会加剧......总之,这
    层叠上下文的层层嵌套方式,着实增加了神经的紧张程度

    案例:用户登录,并展示该用户的各科成绩。在页面发送两次请求:

    1. 查询用户,查询成功说明可以登录
    2. 查询用户成功,查询科目
    3. 根据科目的查询结果,获取去成绩
      分析:此时后台应该提供三个接口,一个提供用户查询接口,一个提供科目的接口,一个提
      供各科成绩的接口,为了渲染方便,最好响应 json 数据。在这里就不编写后台接口了,而
      是提供三个 json 文件,直接提供 json 数据,模拟后台接口:
    user.json:
    { "id": 1, "name": "zhangsan", "password": "123456"
    }
    
    user_corse_1.json:
    { "id": 10, "name": "chinese"
    }
    
    corse_score_10.json:
    { "id": 100, "score": 90
    }
    

    完成案例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    </head>
    <body>
        <script>
    
            let get = function (url, data) { // 实际开发中会单独放到 common.js 中
            return new Promise((resolve, reject) => {
                $.ajax({
                    url: url,
                    type: "GET",
                    data: data,
                    success(result) {
                    resolve(result);
                },
                    error(error) {
                    reject(error);
                }
             });
            })
            }
            // 使用封装的 get 方法,实现查询分数
            get("mock/user.json").then((result) => {
            console.log("查询用户:", result);
            return get(`mock/user_corse_${result.id}.json`);
            }).then((result) => {
            console.log("查询到课程:", result);
            return get(`mock/corse_score_${result.id}.json`)
            }).then((result) => {
            console.log("查询到分数:", result);
            }).catch(() => {
            console.log("出现异常了:" + error);
            });
    
        </script>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:前端基础ES6-promise异步编排

          本文链接:https://www.haomeiwen.com/subject/nbqvndtx.html