1. 程式人生 > 其它 >設計模式概述

設計模式概述

generator和函式不同的是,generator由function*定義(注意多出的*號)
除了return語句,還可以用yield返回多次

function* test() {
  let x = 1
  yield x + 1;
  yield x + 2;
  return x + 3;
}
const gen = test()
console.log(gen)
console.log(gen.next())
console.log(gen.next())
console.log(gen.next())
console.log(gen.next())

generator還有另一個巨大的好處,就是把非同步回撥程式碼變成“同步”程式碼

例:

實現async await

function asyncFn() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(111)
      resolve(222)
    }, 1000)
  })
}
function asyncFn2() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(333)
      resolve(
444) }, 1000) }) } function* test() { yield asyncFn(); yield asyncFn2(); yield 'ddd'; return 3; } const gen = test() function step(gen) { const { value, done } = gen.next() res = value if(done) return // Promise.resolve如果引數是 Promise 例項,那麼Promise.resolve將不做任何修改、原封不動地返回這個例項。 Promise.resolve(value).then((res) => { step(gen) console.log(res) }) } step(gen)