zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    ZOJ 2158 Truck History
    Knight Moves (zoj 1091 poj2243)BFS
    poj 1270 Following Orders
    poj 2935 Basic Wall Maze (BFS)
    Holedox Moving (zoj 1361 poj 1324)bfs
    ZOJ 1083 Frame Stacking
    zoj 2193 Window Pains
    hdu1412{A} + {B}
    hdu2031进制转换
    openjudge最长单词
  • 原文地址:https://www.cnblogs.com/dongxuelove/p/12935484.html
Copyright © 2011-2022 走看看