promise初使用

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    </body>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
    <script>
        let createPromise=new Promise((resolve,reject)=>{
            $.ajax({
                url:'./ajax.json',// 同级目录下新建一个json文件用以访问
                dataType:'json',
                success(data){
                    resolve(data)
                },
                error(err){
                    reject(err)
                }
            })
        });
        createPromise.then((data)=>{
            console.log(data)
        },(err)=>{
            console.log(err)
        })
    </script>
</html>

一个接口的请求当然看不出Promise的有点 请求多个接口试试  这里所需要的就是Promise.all

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    </body>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
    <script>
        let createPromise=new Promise((resolve,reject)=>{
            $.ajax({
                url:'./ajax.json',// 同级目录下新建一个json文件用以访问
                dataType:'json',
                success(data){
                    resolve(data)
                },
                error(err){
                    reject(err)
                }
            })
        });
        let createPromise1=new Promise((resolve,reject)=>{
            $.ajax({
                url:'./all.json',// 同级目录下新建一个json文件用以访问
                dataType:'json',
                success(data){
                    resolve(data)
                },
                error(err){
                    reject(err)
                }
            })
        });
        Promise.all([
            createPromise,createPromise1
        ]).then((result)=>{
            // 全部成功执行
            let [res1,res2]=result;
            console.log(res1,res2)
        },(err)=>{
            console.log(err)
        })
    </script>
</html>

这里新建了两个promise 对象  如果多的话 这样很麻烦 我们这里在封装一下

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    </body>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
    <script>
        function myPromise(url) {
            return new Promise((resolve, reject) => {
                $.ajax({
                    url,
                    dataType: 'json',
                    success(data) {
                        resolve(data)
                    },
                    error(err) {
                        reject(err)
                    }
                })
            });
        }
        Promise.all([
            myPromise('./ajax.json'), myPromise('./all.json')
        ]).then((result) => {
            let [res1, res2] = result;
            console.log(res1, res2)
        }, (err) => {
            console.log(err)
        })
    </script>
</html>

我们接下来看这个代码输出的结果是什么

let p = $.ajax({
            url: './all.json',
            dataType: 'json'
        })
        console.log(p)

高版本的jq的ajax 才有这个哟 所以我们接下来可以这样写,不需要自己建立Promise 输出结果完全一样

function myPromise(url) {
            return $.ajax({
                url,
                dataType: 'json'
            })
        }
        Promise.all([
            myPromise('./ajax.json'), myPromise('./all.json')
        ]).then((result) => {
            let [res1, res2] = result;
            console.log(res1, res2)
        }, (err) => {
            console.log(err)
        })

再介绍一个race  请求多个 最先返回的就是我们使用的数据

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    </body>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
    <script>


        function myPromise(url) {
            return $.ajax({
                url,
                dataType: 'json'
            })
        }
        Promise.race([
            myPromise('./ajax.json'), myPromise('./all.json')
        ]).then((result) => {
            let res1 = result;
            console.log(res1)
        }, (err) => {
            console.log(err)
        })
    </script>
</html>

 

版权声明:本文为xqzi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xqzi/p/10475475.html