美文网首页
Promise对象的使用

Promise对象的使用

作者: 陶菇凉 | 来源:发表于2018-10-25 13:17 被阅读14次

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
1、promise有三种状态,分别是reject(失败)、fulfilled(完成)、pending(正在进行时)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。
2、一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

注意,为了行文方便,本章后面的resolved统一只指fulfilled状态,不包含rejected状态。
3、promise对象是一个构造函数,用来生成promise实例

let p =new  Promise(
          (reslove,reject)=>{
           //  同意===>成功
              reslove();
           // 拒绝===>失败
              reject();
       }
      );
promise 实例具有then方法,也就是说,then方法是定义在原型对象
p.then(
          ()=>{
              console.log("成功");
          },
          ()=>{
           console.log("失败");
          }
      )

4、promise的方法

Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

 Promise.all(
           [
           $.ajax({
                url:'./1.txt'
            }),
            $.ajax({
                url:'./2.txt'
            }),
            $.ajax({
                url:'./3.txt'
            }),
           ]).then(
                (data)=>{
                    console.log(data)
                }
        )

5、promise小实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script> 
        // class练习
        // 学生的类  属性 性别 成绩 年龄
        // 原型方法  成绩平均数
           // 男女比例  精确到小数点后3位

        class Student{
            constructor(sex,grade){
                this.sex=sex;
                this.grade=grade;
                // this.age=age;

            }
            fn(...arg){
                // 接受到数据
                console.log(arg);
                // 这个方法有问题,遍历出来的item和val是对象
            //   let  grade =  arg[0].reduce(
            //         (item,val,index)=>{
            //             if (index<arg.length-1){
            //                 return item+val;
            //             }else{
            //                 // console.log(val);
            //                 // console.log(item.grade+"."+val.grade);
            //                 return (item+val)/arg[0].length;
            //             }
            //         }
            //     )
            let grade=0;
            // 进行遍历,对数据进行操作
            arg[0].forEach(
                element=>{
                    grade+=element.grade;
                });
                console.log(grade/arg[0].length);
            }
        }
        // 生成数据
        let arr=[];
        for (let i=0;i<5;i++){
            let tr=new Student(rand(0,1),rand(60,100));
            arr.push(tr);
        }
        console.log(arr);
        // 将数据放进原型方法中去
        arr[0].fn(arr);



        function rand(min,max){
            return Math.floor(Math.random()*(max+1-min)+min);
        }
        
        </script>
</body>
</html>

相关文章

网友评论

      本文标题:Promise对象的使用

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