生成器函数的意义在哪里?
由于异步任务的存在,我们需要达成完成前置条件后才会触发的一层一层的回调函数
由于直接书写,会导致回调地狱的存在,并且非常不利于维护
所以我们采取了,生成器函数的使用
利用生成器函数将需要前置的函数存在一个大生成器函数中,然后将生成器函数赋值给一个变量,使用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();
京公网安备 11010502036488号