• ES6-Promise改造异步请求为同步


    1.扩展:ajax

    1.1 代码如下

    $.ajax({
        url:'地址',
        type:'get/post',
        data:{},
        dataType:'json/jsonp',
        success:function(res){
            //请求成功,接收返回值
        }
    })
    

    1.2 概念

    • ajax不能跨域请求
      • 两个网址:协议 主域号 端口号 完全相同时,这时两个网址完全相同,任意其一不同,即为跨域请求
    • 解决跨域:
      • 1.jsonp:在$.ajax({dataType:'jsonp'}),需要后台支持jsonp形式
      • 2.cors:需要后台配合
      • 3.后台设置允许所有或指定网址能直接访问
    • 简写形式:
      • $.get(url,data,function(res){})
      • $.post(url,data,function(res){})

    2.jQuery里的Promise

    2.1 个人理解

    • 同步:同时只能做一件事 代码简单
    • 异步:操作之间没有关系 同时请求进行多个操作,小程序中可用于请求数据api接口,代码更复杂,用同步一样的方式,来书写异步代码
    • Promise.all([$.ajax(),$.ajax()]).then(result=>{alert('对了')},err=>{alert('错了')})

    2.2 代码如下

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>高版本jquery中Promise</title>
        <script src=" https://cdn.bootcss.com/jquery/3.5.0/jquery.js"></script>
        <script>
            // 高版本jquery中Promise自带封装函数
            Promise.all([
                $.ajax({
                    url: 'arr.txt',
                    dataType: 'json'
                })
            ]).then(function(arr) {
                alert('成功');
                let [res1, res2] = arr;
                alert(res1);
                alert(res2);
            }, function() {
                alert('失败');
            });
        </script>
    </head>
    <body>
    </body>
    </html>
    

    3.Promise怎么用

    3.1 利用函数赋值来返回请求数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Promise怎么用</title>
        <script src=" https://cdn.bootcss.com/jquery/3.5.0/jquery.js"></script>
        <script>
            let p = new Promise(function(resolve, reject) {
                // 异步代码
                // resolve——成功了
                // reject——失败了
                $.ajax({
                    url: 'arr.txt',
                    data: {},
                    dataType: 'json',
                    success: function(arr) {
                        //请求成功,接收返回值
                        resolve(arr);
                    },
                    error(err) {
                        reject(err);
                    }
                });
            });
            // 原先js时
            p.then(function() {
                alert('成功');
            }, function() {
                alert('失败');
            });
        </script>
    </head>
    <body>
    </body>
    </html>
    

    3.2 利用函数参数来进行promise操作返回请求数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Promise怎么用</title>
        <script src=" https://cdn.bootcss.com/jquery/3.5.0/jquery.js"></script>
        <script>
            // 封成函数,进行参数传递即可
            function createPromise(url) {
                return new Promise(function(resolve, reject) {
                    // 异步代码
                    // resolve——成功了
                    // reject——失败了
                    $.ajax({
                        url: 'arr.txt',
                        data: {},
                        dataType: 'json',
                        success: function(arr) {
                            //请求成功,接收返回值
                            resolve(arr);
                        },
                        error(err) {
                            reject(err);
                        }
                    });
                });
            }
            // let p1 = new Promise(function(resolve, reject) {
            //     // 异步代码
            //     // resolve——成功了
            //     // reject——失败了
            //     $.ajax({
            //         url: 'arr.txt',
            //         data: {},
            //         dataType: 'json',
            //         success: function(arr) {
            //             //请求成功,接收返回值
            //             resolve(arr);
            //         },
            //         error(err) {
            //             reject(err);
            //         }
            //     });
            // });
            // let p2 = new Promise(function(resolve, reject) {
            //     // 异步代码
            //     // resolve——成功了
            //     // reject——失败了
            //     $.ajax({
            //         url: 'arr.txt',
            //         data: {},
            //         dataType: 'json',
            //         success: function(arr) {
            //             //请求成功,接收返回值
            //             resolve(arr);
            //         },
            //         error(err) {
            //             reject(err);
            //         }
            //     });
            // });
            // 现在js时
            Promise.all([
                // p1, p2
                // 简化操作
                createPromise('arr.txt')
            ]).then(function(arr) {
                alert('成功');
                let [res1, res2] = arr;
                alert(res1);
                alert(res2);
            }, function() {
                alert('失败');
            });
        </script>
    </head>
    <body>
    </body>
    </html>
  • 相关阅读:
    spring boot 2.0.3+spring cloud (Finchley)2、搭建负载均衡Ribbon (Eureka+Ribbon+RestTemplate)
    spring boot 2.0.3+spring cloud (Finchley)1、搭建服务注册和发现组件Eureka 以及构建高可用Eureka Server集群
    windows下安装redis
    Spring注解@Resource和@Autowired的区别
    spring常用管理bean注解
    maven中package和install命令的区别
    SpringBoot打war包并部署到tomcat下运行
    使用jquery.qrcode生成二维码及常见问题解决方案
    动态生成二维码插件 jquery.qrcode.js
    Notepad++的列编辑功能
  • 原文地址:https://www.cnblogs.com/dongxuelove/p/12935484.html
Copyright © 2020-2023  润新知