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