异步编程(Asynchronous) - 11 Promise - Generator生成器
为什么需要生成器函数
- Promise通过链式调用解决了回调过深的问题
- 但是, 即使如此,仍然会有大量的回调函数
- 如何让异步像同步一样写法
Generator
function* foo(){
console.info('start')
try{
const res = yield 'foo'
console.info('res',res)
yield res
}catch(e){
console.info(e)
}
}
// Step_0 :调用这个函数并不会立即执行这个函数,而是会得到一个[[生成器对象]]
const generator = foo()
// Step_1: 需要手动调用这个[[生成器对象]]的next方法才会执行函数的逻辑, 执行到yield的时候,返回yield后面的值,然后函数暂停
const result = generator.next()
console.info('result:', result) // {value: "foo", done: false} 有个done属性表示是否这个函数执行完了
// Step_2: 从刚才暂停的地方继续执行,
const result2 = generator.next('bar') // next方法可以接收参数, 那么这个yield可以接收这个参数,会作为下一个yield的返回值 ⏫⏫⏫
console.info('result2:', result2) // {value: "bar", done: false}
// Step_3: 从刚才暂停的地方继续执行,
console.info(generator.next()) // {value: undefined, done: true}
generator.throw(new Error('Generator error')) // 对生成器手动抛出一个异常, 生成器内部就会得到这个异常
Keep learning

浙公网安备 33010602011771号