Generator
Generator允许我们在函数执行过程中暂停,并在将来某一个时刻回复执行。改变例以往函数必须执行完成才返回的特点。 整个 Generator 函数就是一个封装的异步任务,或者说是异步任务的容器。异步操作需要暂停的地方,都用 yield 语句注明
function* example(){ yield 1; yield 2; yield 3;}let iter=example();iter.next();//{value: 1, done: false},返回一个由yield表达式生成的值iter.next();//{value: 2, done: false}iter.next();//{value: 3, done: false}iter.next();//{value: undefined, done: true}//生成器结束let iter2=example();iter2.return(75);//给定返回值,并结束生成器{value: 75, done: true}itet2.next();//{value: undefined, done: true}//生成器结束let iter3=example();iter3.return();//{value: undefined, done: true}//生成器结束复制代码
Generator.prototype.throw()//抛出异常
async await(Generator的语法糖)
async function
关键字用来在表达式中定义异步函数。
await
操作符用于等待一个Promise
对象。只能在异步函数async function
中使用。await
返回promise
的操作对象的返回结果-如果promise
正常处理,其回调函数resolve函数参数作为await
表达式的值继续执行async function
,如果执行错误,await 表达式会把Promise
的异常原因抛出,- 若果等待的不是
promise
对象,则返回该值本身
function resolveAfter2S(data){ return new Promise((res)=>{ setTimeout(()=>{ res(data) },2000); });}async function f1(){ let x=await resolveAfter2S(10); let y=await 30; console.log(y);//30 console.log(x);//10}f1()复制代码