填坑-十万个为何?(20)

简介:不少概念不清或忘记,从新构建本身的知识体系。天天问本身1~多个问题。我是菜鸟 成为大神之路!es6

1.认识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());
复制代码

参考地址: developer.mozilla.org/en-US/docs/…

2.es7语法糖async/await

async关键字提及,它被放置在一个函数前面。就像下面这样:函数

async function f() {
    return 1
}
复制代码

函数前面的async一词意味着一个简单的事情:这个函数老是返回一个promise,若是代码中有return <非promise>语句,JavaScript会自动把返回的这个value值包装成promiseresolved值。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

相关文章
相关标签/搜索