用户:
蓝矮爱乐查看:2 回复:1 评论:2 创建时间:2022-05-04T07:36:01
function sleep(timeMS){
return new Promise((resolve)=>{
setTimeout(()=>{
resolve()
},timeMS)
})
}
上面的代码是来干扰的,直接看红色字的下面就行
据说,async function是异步函数,await 必须使用在异步函数里
function* 是生成器函数,yield 必须用在生成器函数里
await是等待异步执行完成,yield是中断这个函数直到执行到XXX.next()就会继续执行函数
我们已知异步函数怎么用await,那么,生成器函数怎么用yield呢?
;(async function(){
await sleep(1000);
console.log('start!');
await sleep(1000);
console.log('one!');
await sleep(1000);
console.log('two!');
await sleep(1000);
console.log('three!');
await sleep(1000);
console.log('end!');
})()
上段代码的作用就是重复5次每过一秒就会向控制台输入各种英文单词()()
那么,如何用yield做出同样的效果呢?
上代码吧!
/*生成器函数function关键词后面要跟着“*这个符号”*/
var a=(function*(){
console.log('start!');
yield 'start';//执行到这个地方,停止,并返回'start'这个字串符
console.log('one!');
yield 'one';
console.log('two!');
yield 'two'
console.log('three!');
yield 'three';
console.log('end!');
return 'end'
})();
(async function(){
for(var x=0;x<5;x++){
await sleep(1000)
a.next()//当函数停止了的时候,继续执行这个函数,执行直到下一个yield的时候停止
//比如,一个函数有3个yield,用()调用时不会执行这个函数
//必须用一个变量赋值这个“生成器函数()”的时候,才能用变量“变量名.next()”来继续执行
//生成器函数被执行后,如果是第一次执行,那么,他会执行到第2个yield为止,返回yield后面的字符
//如果是第二次执行这个生成器函数,那么,他会执行到第3个yield为止,返回yield后面的字符
//以此类推,执行到return时,会跳出这个函数(不是暂停了啊,跳出后还用next()继续执行,会返回undefined)
}
})()