B站小马哥ES6(三)

一、Promise对象

  • 相当于一个容器,保存着未来才会结束的事件(异步操作)的一个结果
  • 各种异步操作都可以用同样的方法进行处理

1.特点

  • 对象的状态不受外接影响,处理异步操作有三个状态,Pending(进行) Resolved(成功) Rejected(失败)
  • 一旦状态发生改变,不会再变,任何时候都可以得到这个结果
let pro = new Promise(function(resolved,rejected){
    let res = {
        code:201,
        data:{
            name:'小明'
        },
        error:'失败'
    }
    setTimeout(()=>{
        if(res.code === 200){
            resolved(res.data)
        }else{
            rejected(res.error)
        }
    },1000)
})

pro.then((val)=>{
    console.log(val);
},(err)=>{
    console.log(err)
})

2.then()方法

  • 第一个参数是resole回调函数,第二个参数是可选的,是reject状态的回调
  • tnen()返回的是一个新的Promise实例,可以采用链式编程
.then(null,err=>{
    
})

等价于

catch(err=>{
    
})

3.resolve()方法

  • 将现有的任何对象转换为Promise对象
let p = Promise.resolve('foo')
//等价
let p = new Promise(resolve=>resolve('foo'));
p.then((data)=>{
    console.log(data)
})

4.all()方法

  • 应用:一些游戏类的素材比较多,要都加载完成了以后才显示在页面上面
let promise1 = new Promise((resolve,reject)=>{});
let promise2 = new Promise((resolve,reject)=>{});
let promise3 = new Promise((resolve,reject)=>{});
let p4 = Promise.all([promise1,promise2,promise3])
p4.then(()=>{
    //都成功才为成功
}).catch({
    //一个失败则失败
})

5.race()方法

  • 某个异步请求设置超时事件,并且在超时后执行相应的操作
Promise.race([requestImg('images/1.png'),timeout()]).then(data=>{
    console.log(data)
}).catch(err=>{
    console.log(err)
})
//超时了返回error

6.finally() 和done()

  • 不管成功和失败都会走,用的少

二、async的用法

1. 作用

使得异步操作更加方便

2.基本操作

  • async它会返回一个Promise对象 then catch
  • async是Generator的一个语法糖
async function f(){
    let s = await 'hello async';
    let data = await s.split('');
    return data;
}
f().then(v=>{console.log(v)});
//所有await执行结束后才返回

三、class类

class Person{
    //创建实例立即执行
    constructor(name,age){
        this.name = name
        this.age = age
    }
    sayName(){
        return this.name
    }
    sayAge(){
        return this.age
    }
}
let p1 = new Person('小明',20)
console.log(p1)

也可以通过Object.assin()方法,一次性向类中添加多个方法

class Person{
    //创建实例立即执行
    constructor(name,age){
        this.name = name
        this.age = age
    }
}
Object.assign(Person.prototype,{
	    sayName(){
	    return this.name
	},
	    sayAge(){
	    return this.age
	}
})
let p1 = new Person('小明',20)
console.log(p1)

四、类的继承

  • 会继承父类的属性和方法,子类有自己的方法,也可以重写父类的方法
class Animal{
    constructor(name,age){
        this.name = name
        this.age = age
    }
    sayName(){
        return this.name
    }
    sayAge(){
        return this.age
    }
}

class Dog extends Animal{
    constructor(name,age,color){
        super(name,age)
        this.color = color
    }
}

let p1 = new Dog('小明',20,'红色')
console.log(p1)

五、Module模块的使用

  • es6模块功能主要有两个命令构成:export和import
  • export用于规定模块的对外接口
  • import用于输入其他模块提供的功能(导入)
  • 一个模块就是独立的文件

暴露

export const nama = '小明'
export const age = 20
export function sayName(){
	return 'my name is 小马哥'
}

引入

import {name,age,sayName} from './modules/index.js'

用到default暴露的时候在一个js文件只能出现一次

export default obj;

接收

import obj from './modules/index.js'
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值