function * fn(){
yield 10;
y = yield 'foo';
yield y;
}
var test = fn();
console.log(test.next()) // { value: 10, done: false }
console.log(test.next()); // { value: 'foo', done: false }
console.log(test.next(11)) // { value: 11, done: false }
console.log(test.next()) // { value: undefined, done: true }
1、函数生成器特点是函数名前面有一个‘*’
2、通过调用函数生成一个控制器
3、调用next()方法开始执行函数
4、遇到yield函数将暂停
5、再次调用next()继续执行函数
function fn1() {
//假设这是一个ajax请求
return new Promise((resolve) => {
resolve(1)
})
}
function fn2() {
//假设这是一个ajax请求
return new Promise((resolve) => {
resolve(2)
})
}
function fn3() {
//假设这是一个ajax请求
return new Promise((resolve) => {
resolve(3)
})
}
//这里是函数生成器
function* g() {
//当异步操作完毕yield会得到值
//这里会自动继续执行
var res1 = yield fn1();
var res2 = yield fn2();
var res3 = yield fn3();
}
var test = g();
// it.next().value;
test.next().value.then((res1) => {
console.log(res1)
test.next().value.then(res2 => {
console.log(res2)
})
})