ES8新特性

ES6,ES8 异步解决方案

总所周知:js是单线程,在ES6中为了解决回调问题,引入了Promise的then函数,业务逻辑很多的时候,需要链式多个then函数,语义也会变得不清楚。所以,es8推出了.async,await 异步解决方案

// ES6 Promise特性
let p = new Promise((resolve,reject) => {this.loginIn(resolve)})
    .then(()=>this.getInfo())
    .then(()=>{console.log("ok")})
    .catch((err)=>{
        console.log(err)
    })

Generator函数应运而生,它只是一个分段执行任务,通过状态指针next分布执行任务,但是流程管理不太方便(每个阶段何时执行不太明了),所以它只是一个中间产物。
generator和函数不同的是,generator由function定义(注意多出的号),并且,除了return语句,还可以用yield返回多次。

// Generator
	function* foo(x){
        yield x+1;
        yield x+2;
        return x;
    }
    // 举例:
    // 产生斐波那契数列的函数 , 0,1,1,2,3,5,8,13,21,34...
    function fibonacci(max){
        var a=0,b=1,arr=[0,1];
        while(arr.length<max){
            [a,b] = [b,a+b];
            arr.push(b)
        }
        return arr;
    }
    // console.log(fibonacci(5))
    function* fib(max){
        var a=0,b=1,n=0;
        while(n<max){
            yield a;
            [a,b]=[b,a+b];
            n++;
        }
        return;
    }
    // 直接调用一个generator和调用函数不一样,fib(5)仅仅是创建了一个generator对象,还没有去执行它。
    // 调用generator对象有两个方法,一是不断地调用generator对象的next()方法:

    // console.log(fib(5).next()); //{value: 0, done: false}
    for (var x of fib(10)) {
        console.log(x); // 依次输出0, 1, 1, 2, 3, ...
    }
    // 另一种 for...of

async,await 异步解决方案

async/await是写异步代码的新方式,以前的方法有回调函数和Promise。相比于Promise,它更加简洁,并且处理错误、条件语句、获取中间值都更加方便

    async function asyncFunc(params) {
        const r1 = await this.loginIn()
        const r2 = await this.getInfo()
    }

Object.entries()/Object.values

 	// Object.entries() 将对象的可枚举属性与值按照二维数组的方式返回
    console.log(Object.entries({a:1,b:2,c:3}));//[["a",1],["b",2],["c",3]]
    console.log(Object.entries([1,2]));//[["0",1],["1",2]]
    // Object.values()  与Object.entries() 工作原理很像,只是返回的是键值对中的值,是一唯数组
    console.log(Object.values([1,2])); //[1,2]
    console.log(Object.values({a:1,b:2,c:3})); //[1,2,3]

padStart() /padEnd()

 	// 字符串填充 padStart() , padEnd()  该方法可以使得字符串达到固定长度。它有两个参数,字符串目标长度和填充内容
    var str = "liujing";
    console.log(str.padStart(12,'s')); // sssssliujing
    console.log(str.padStart(2,'s')); // liujing

Promise小Demo

	 var pro = new Promise(function (resolve, reject) {
        console.log("1")
        setTimeout(function(){
            console.log(2)
        },0)
        resolve("4")
    })
    pro.then(function (result) {
        console.log('成功:' + result);
    });
    console.log("3")   // 1,3,4,2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值