Generator应用之一

159 阅读1分钟

Generator 使用 Promise(发送请求)

async/await是generator的语法糖。 下面是generator的用法

Generator基本用法

创建一个生成器,写法如下

// 写法1
function *fn1() {}

// 写法2
function* fn2() {}

// 错误写法
function*fn3() {}

生成器使用, 内部需要使用yied关键字,之后需要用next()方法来对生成器进行迭代

function *fn1() {
    yied 1
    yied 2
}
let f = fn1()
console.log(f.next()) 
console.log(f.next())
console.log(f.next())

next()方法返回的是一个对象,对象中包含value和done两个属性,value是返回值,done是用来判断是否进行下一次迭代,true为不进行,value返回值为undefined。

输出结果: image.png

解决异步请求

// 模拟接口请求
  function req (i) {
      return new Promise(function(res, rej){
        setTimeout(function(){
          res({
            code: '200',
            data: i
          })
        }, 1000)
      })
}

console.log('start-------------')
let result = '' // 返回结果
function *syncFn() {

 yield req(1).then(res => {
     result = res.data; 
     console.log(res.code, res.data, 'result',result);
     syncObj.next()  // 在这里调用 不然获取不到resulte的值
   })
 console.log(result, '123456') 
 yield req(result+1).then(res => {console.log(res.code, res.data, '2')})
}

let syncObj = syncFn()
syncObj.next()
console.log('-------------------')

PS: 在工作中不常用