猫史档案馆


【JavaScript】今天,我又学会了一个关键词的用法,那就是yield!

用户:蓝矮爱乐蓝矮爱乐查看: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)
    }
})()


回复

上一页1 页 / 共 1下一页
该账号已被封禁该账号已被封禁

“据说,async是异步函数”
《 据 说 》

点赞0


评论