生成器函数的意义在哪里?
由于异步任务的存在,我们需要达成完成前置条件后才会触发的一层一层的回调函数
由于直接书写,会导致回调地狱的存在,并且非常不利于维护
所以我们采取了,生成器函数的使用
利用生成器函数将需要前置的函数存在一个大生成器函数中,然后将生成器函数赋值给一个变量,使用next()方法
从而达到层层使用,一层一层推进,完成利于维护的异步代码
生成器函数的标志function * 函数名(){} 它的精髓就在于funcition 和 函数名中间的那个*号
function one() { setTimeout(() => { console.log("111"); // 此时在one里面继续运行next()方法,既可以运行gun里下一条函数two,又可以传回one的返回值 // 但是因为这个时候的next()小括号里没有传实惨,所以传回去的返回值是undefined fn.next(); }, 1000); } function two() { setTimeout(() => { console.log("222"); // 继续使用next()方法启动gun函数里two下面一条函数three fn.next(); }, 1000); } function three() { setTimeout(() => { console.log("333"); // 继续使用next()方法,虽然three下一条没有函数了,但是通过next()可以将three的返回值传输回去 fn.next(); }, 1000); } function * gen() { yield one(); yield two(); yield three(); } //准备利用生成器函数gen搞事情 let fn = gen(); //使用生成器函数的next方法.这里是第一次使用next()方法,相当于告诉生成器函数开始使用了 //然后生成器函数会自动运行第一条语句,但是此时第一条语句是没有返回值的 fn.next();