Promise

1.什么是Promise
Promise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。(ps:什么是原型:javascript中的原型与原型链_傻小胖的博客-CSDN博客_javascript原型和原型链)

Promise对象有以下两个特点。

(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

 <script>
        //创建一个promise对象
        let promise = new Promise((resolve,reject)=>{
            setTimeout(function(){
                console.log(123);
            },1000)
        })
    </script>

不写p0时候:

        参数resolve代表的是成功

        参数reject代表的是失败

写p0时候(输出p0):

Promise {<pending>}
    [[Prototype]]: Promise
    [[PromiseState]]: "fulfilled"
    [[PromiseResult]]: undefined

 全代码:

 <script>
        let promise_1 = new Promise((resolve,reject)=>{
            num = 9
            if (num>10) {
                resolve("num大于10")
            }else{
                reject("num<10")
            }
        })
       let p0 = promise_1.then((data)=>{
            console.log(data);
        },(data)=>{
            console.log(data);
        })
        console.log(p0);
    </script>

 

猜数字案例:

<body>
    <input type="button" value="猜数字" id="btn">
    <script>
        //获取到input标签
        let btn = document.getElementById("btn")
        // 给btn添加点击事件
        btn.addEventListener("click",()=>{
            //创建一个Promise对象 
            let promise = new Promise((resolve,reject)=>{
                // 创建一个生成1-10的整数
                let num = Math.floor(Math.random()*10)
                // 输出一个数字
                let n  = prompt("请输入数字:")
                setTimeout(()=>{
                    if (n == num) {
                        resolve("对")
                    } else {
                        reject("错")
                    }
                },2000)
            })
            promise.then((data)=>{
                alert(data)
            }).catch((data)=>{
                alert(data)
            })
        })
    </script>
</body>

 

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="text" id="uname">
    <input type="button" value="删除" name="" id="btn">
    <script>
        //Set:集合,跟数组很像,但其中存放的元素是唯一的
        //创建Set
        let scores = [2,31,41,241,21,41,24,234,14,134,1,22,2,31,41]
        let s_1 = new Set(scores)
        console.log(s_1);

        //使用Set解决数组去重问题
        // 还可以通过Set()构造函数实现将数组转换为Set集合

        //转为数组,用Array.from()              (也是去掉了重复的)
        let s_2 =new Set ([12,31,412314,15,452,11,5,252,6,12,31])
        let arr = Array.from(s_2)
        console.log(arr);

        // size属性用来获取数组中的元素个数(也是去掉了重复的)
        console.log(s_2.size);

        // 创建一个空集合
        let s_3 = new Set()

        // 可以使用add()给集合添加元素
        s_3.add(111)
        console.log(s_3);

        // 数组中添加元素用什么
        let arr2 = ['zhang','li']
        // 将wang添加进去
        arr2.push('wang')
        console.log(arr2);
        // 将wu添加进去
        arr2.unshift('wu')
        console.log(arr2);

         // 数组中删除元素用什么
         // 将wang添加进去
        arr2.pop()
        console.log(arr2);
        // 将wu添加进去
        arr2.shift()
        console.log(arr2);

        // 删除集合中的元素 delete()
        //使用delete()删除元素时,当删除的元素在集合中存在时,则返回true,反之则返回false
        console.log(s_2.delete(31));
        console.log(s_2.delete(41));
        console.log(s_2);

        // 判断集合中是否包含某个元素,使用has()进行判断,当包含这个元素时候返回true,不包含返回false
        console.log(s_2.has(40));

        // 先获取btn按钮
        let s_4 = new Set(['zhangsan','lisi','wangwu'])
        document.getElementById("btn").addEventListener("click",()=>{
            let uname = document.getElementById("uname").value
            if (s_4.has(uname)) {
                s_4.delete(uname)
                alert("删除成功")
            } else {
                alert(uname+"不存在,删除失败")
            }
        })
        // 清空数组中的元素
        let s_5 = new Set(['zhangsan','lisi','wangwu'])
        s_5.clear()

        // for-of
        const s = new Set();
        s.add(1).add(2).add(3)
        for(const i of s){
            console.log(i);
        }
    </script>
</body>
</html>

 

 for each

  <script>
        let scores = [23,41,425,36,36]
        let s_1  = new Set(scores)
        // console.log(s_1);
        // console.log(s_1.keys());

        for( const k of s_1.keys()){
            console.log(k);
        }
        console.log('````````````````````````````````');
        for(const v of s_1.values()){
            console.log(v);
        }
        console.log('````````````````````````````````');

        for(const e of s_1.entries()){
            console.log(e);
        }
        console.log('````````````````````````````````');
        s_1.forEach((value,key)=>{
            console.log(key+':'+value);
        })

    </script>

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //创建一个Map对象
        let tels = new Map()
        //存储联系人以及联系电话,使用set添加元素
        tels.set("一",'11')
        tels.set("二",'12')
        tels.set("三",'13')
        // 获取Map中的键值对应的值。使用get(),根据键获取值
        console.log(tels.get("一"));
        console.log(tels);

        // 删除
        console.log(tels.delete("二"));
        console.log(tels);

        // 遍历
        for(let t of tels){
            console.log(t[0],t[1]);
        }

        //Set,Map,Array之间的切换
        const map1 = new Map();
        map1.set('k1',1);
        map1.set('k2',2);
        map1.set('k3',3);
        console.log(Array.from(map1).toString());
        // console.log(Array.from(map1));

        // 将字符串转换成Array
        console.log(Array.from('hello world'));

        // 将map1的每个键值都加2
        let  diobj={
            handle:function(n){
                return n+2
            }
        }

        console.log('%s',Array.from(
            [1,2,3,4,5],
            function(x){
                return this.handle(x)
            },diobj));
            console.log('```````````````````````````````');
            //键名
            console.log(map1.keys());
            // 键值
            console.log(map1.values());
            // 键值对
            console.log(map1.entries());
            console.log('```````````````````````````````');


            // 使用foreach
            map1.forEach((values,keys)=>{
                console.log(keys+":"+values);
            })
    </script>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //创建一个大类
        /*
        语法格式:
        class 类名(首字母大写){

        }
        
        
        */
       class Person{
        //    构造函数实现初始化
        constructor(name,sex,age){
            this.name =name
            this.sex = sex
            this.age = age
        }
        // 行为:用方法(函数)来实现
        work(){
            console.log("工作");
        }
        eat(){
            console.log("吃饭");
        }
        sayHellow(){
            console.log(`大家好我叫${this.name},我是${this.sex}生,年龄${this.age}`);
        }
        getName(){
            return this.name
        }
        cal(n,m){
            console.log(n+m);
        }
        // staric:静态的
        // 使用static来修饰的函数只能通过类名进行访问,不能通过对象来访问    ---83行
        static fun(){
            console.log("静态函数");
        }
       }
    //    let p0 = new Person("啥的","男",20)
    //    p0.eat()
    //    p0.work()
    //    p0.sayHellow()
    //    console.log(p0,getName())
    //    p0.cal(1,2)

    //父类Person   继承:extends
    //Student被称为子类
    // 当子类继承了父类,那么子类就可以访问父类中的属性,函数
    // 实例化对象的时候,构造函数中的参数的个数一定要完整
    class Student extends Person{
        constructor(name,sex,age,stuid){
            super(name,sex,age,stuid) //必须先调用一下super()函数
            // this.name = name
            this.stuid = stuid
            // this.age = age
            // this.sex = sex
        }
        //当父类和子类中有相同名称的函数时,调用的是子类函数,这就相当于子类将父类中的同名函数进行了重写
        sayHellow(){
            // console.log(`大家好我叫${this.name},我是${this.sex}生,年龄${this.age}`);
            // 高级语言用base
            // base.sayHellow()
            super.sayHellow() //可以通过super调用父类中的函数
        }
        // sayHellow(n){
        //     console.log(`大家好我叫${this.name},我是${this.sex}生,年龄${this.age},${n}`);
        // }
    }
    let stu = new Student("张三","男",20,"1001")
    stu.work()
    // stu.sayHellow(10)
    stu.sayHellow()
    Student.fun()
    </script>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值