简介:不少概念不清或忘记,从新构建本身的知识体系。天天问本身1~多个问题。我是菜鸟 成为大神之路!
es6
es6 Generator
函数!generator
(生成器)是ES6标准引入的新的数据类型
segmentfault
generator
跟函数很像,定义以下:promise
function* foo(x) {
yield x + 1;
yield x + 2;
return x + 3;
}
复制代码
generator
和函数不一样的是,generator由function*
定义(注意多出的*
号),而且,除了return
语句,还能够用yield
返回屡次。async
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());
复制代码
es7
语法糖async/await
async
关键字提及,它被放置在一个函数前面。就像下面这样:函数
async function f() {
return 1
}
复制代码
函数前面的async
一词意味着一个简单的事情:这个函数老是返回一个promise
,若是代码中有return <非promise>
语句,JavaScript
会自动把返回的这个value
值包装成promise
的resolved
值。ui
`代码①`
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
才会继续往下执行。spa
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
资源,由于引擎可以同时作其余工做:执行其余脚本,处理事件等等。code
参考文章:
① developer.mozilla.org/en-US/docs/…
② segmentfault.com/a/119000001…cdn