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()