vue eight day

Promise

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // promise 处理异步任务
        // 1.可以避免多层异步调用
        // 2.Promise对象提供了简介的api,使得控制异步操作更加容易
        var p=new Promise(function(resolve,reject){
            // 成功时调用resolv
            resolve("正常");
            // 失败时调用reject
            reject("失败");
        })
        p.then(function(data){
            // 从resolv得到的正常结果
            console.log(data)
        },function(info){
            // 从reject得到的错误信息
            console.log(info)
        })
    </script>
    
</body>
</html>

和ajax配合使用

<script>
// ===================================================
        // 怎么和ajax配合
        // 就是封装一个方法 里面去ajax 然后用promise处理结果
        // 然后用then来处理数据
        // 如果需要嵌套调用ajax 就可以一直调用那个方法 then也可以一直嵌套使用
        // 见下面伪代码
        // 1.先封装一个调用接口伪代码
        function querydata(url){
            return new Promise(function(resolve,reject){
                $.ajax(url,function(data){
                    if("正常"){
                        resolve(data)
                    }else{
                        reject("服务器出错")
                    }
                })
            })
        }
        // 2.在第一个then里可以继续嵌套调用ajx封装函数 然后继续then处理结果
        // 其实还是在疯狂嵌套回调,只是比jquery代码可读性高一点
        // 3.如果最后return不是promeis对象,只是普通的数据,then会默认return一个promeis对象
        querydata("url")
        .then(function(data){
            return querydata("url2")
        })
        .then(function(data){
            return querydata("url3")
        })
        .then(function(data){
            console.log(data)
        })
    </script>

 Promeis其他实例常用方法

promeis.then() 处理正常结果

promeis.catch() 处理异常数据  主要用于接收reject的数据

promeis.finall() 无论是否正常都会调用

        // ===================================================================
        // 其他常用api写法
        querydata("url")
        .then(function(data){
            console.log(data)
        })
        .catch(function(){
            console.log(data)
        })
        .finally(function(data){
            console.log(data)
        })

Promeis其他对象常用方法

        // ====================================================================
        // 对象方法
        // all() 一起调用异步 需要所有得到结果后才完成
        var p1=querydata("url")
        var p2=querydata("url")
        var p3=querydata("url")
        Promise.all([p1,p2,p3]).then(function(result){
            console.log(reuslt) // result 是一个数组
        })
        // race() 一起调用异步 得到一个结果后就完成 其他得异步还是会进行 但是不关心结果
        Promise.race([p1,p2,p3]).then(function(result){
            console.log(result) // result 是一个单数据
        })

 

posted @ 2020-06-07 14:49  桜満三葉  阅读(138)  评论(0编辑  收藏  举报