简介:很多概念不清或忘记,重新构建自己的知识体系。每天问自己1~多个问题。我是菜鸟 成为大神之路!
1.认识es6 Generator
函数!
generator
(生成器)是ES6标准引入的新的数据类型
generator
跟函数很像,定义如下:
function* foo(x) {
yield x + 1;
yield x + 2;
return x + 3;
}
generator
和函数不同的是,generator由function*
定义(注意多出的*
号),并且,除了return
语句,还可以用yield
返回多次。
function* foo(){
let a = 1;
yield a;
a++;
yield a;
a++;
return a;
}
let f = foo();
console.log(f.next());
console.log(f.next());
console.log(f.next());
2.es7
语法糖async/await
async
关键字说起,它被放置在一个函数前面。就像下面这样:
async function f() {
return 1
}
函数前面的async
一词意味着一个简单的事情:这个函数总是返回一个promise
,如果代码中有return <非promise>
语句,JavaScript
会自动把返回的这个value
值包装成promise
的resolved
值。
`代码①`
async function f() {
return 1
}
f().then(function(data){console.log(data)});//1
`代码②`
async function f() {
return Promise.resolve(1)
}
f().then(function(data){console.log(data)});//1
`代码①和代码②执行结果一样`
关键词await
可以让JavaScript
进行等待,直到一个promise
执行并返回它的结果,JavaScript
才会继续往下执行。
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve('done!'), 1000)
})
let result = await promise // 直到promise返回一个resolve值(*)
console.log(result) // 'done!'
}
f()
await
字面上使得JavaScript
等待,直到promise
处理完成,
然后将结果继续下去。这并不会花费任何的cpu
资源,因为引擎能够同时做其他工作:执行其他脚本,处理事件等等。
参考文章:
① developer.mozilla.org/en-US/docs/…
② segmentfault.com/a/119000001…