ES6 Generator函数 11月第三周

Generator 函数

  • 在function后面,函数名之前有个 * 号。
  • 函数内部有yield表达式。
  • 其中 * 用来表示函数为 Generator 函数,yield 用来定义函数内部的状态。

	function* func(){
		 console.log("one");
		 yield '1';
		 console.log("two");
		 yield '2'; 
		 console.log("three");
		 return '3';
	}
let f=function();
f.next();
// one
// {value: "1", done: false}
 
f.next();
// two
// {value: "2", done: false}
 
f.next();
// three
// {value: "3", done: true}
 
f.next();
// {value: undefined, done: true}

next() 调用

一般情况下,next 方法不传入参数的时候,yield 表达式的返回值是 undefined 当 next 传入参数的时候,该参数会作为上一步yield的返回值。

function* func(){
 console.log("one");
 yield '1';
 console.log("two");
 yield '2';
}
let f=function();
f.next();
// one
// {value: "1", done: false}
 
f.next();
// two
// {value: "2", done: false}

f.next();
// {value: undefined, done: true}

done 表示函数是否执行完, true表示执行完了 false表示未执行完。

return方法

  • return 方法返回给定值,并结束遍历 Generator 函数。
  • return 方法提供参数时,返回该参数;不提供参数时,返回 undefined 。
function* func(){
 console.log("one");
var a= yield 1 ;
 console.log("two");
var b= yield 2 ;
 console.log("three");
// return 99;
console.log("three");
 yield 3;
 console.log("four");
 return 4;
}
let f=function();

clonsole.log(f.next());

clonsole.log(f.next(10)); 

f.return(88);

clonsole.log(f.next(20));

clonsole.log(f.next());


ES6 async 函数

  • async 是 ES7 才有的与异步操作有关的关键字,和 Promise , Generator 有很大关联的。

语法

async function name([param[, param[, ... param]]]) { statements }
  • name: 函数名称。
  • param: 要传递给函数的参数的名称。
  • statements: 函数体语句。
async function func(){
    return "调用一下我";
  }
  
console.log(func())
 
func().then(v=>{
   console.log(v);         
})

promise方法

var abc = new Promise(function(resolve,reject){
	resolve("调用我");
})

abc.zhen((v)=>{
	console.log(v);
})

console.log(abc);
  • async 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。
  • await 关键字仅在 async function 中有效。如果在 async function 函数体外使用 await ,你只会得到一个语法错误。
  • Promise 对象:await 会暂停执行,等待 Promise 对象 resolve,然后恢复 async 函数的执行并返回解析值。
  • 非 Promise 对象:直接返回对应的值。
function testAwait () {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(111);
    }, 1000);
  });
  return setTimeout(() => {
      console.log(222);
    }, 1000); 
}
 
async function helloAsync() {
await testAwait ();
  console.log(333); 
}
helloAsync ();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值