首页 > Web开发 > 详细

js generator妙用

时间:2021-06-30 21:11:43      阅读:26      评论:0      收藏:0      [点我收藏+]
/**
 * generator的精华在于next的参数,这样的能力才让generetor成为了一种强悍的流程能力
 */

function mypromise() {
  return Promise.resolve({x: 1})
}


function* mygen() {
  var data = yield mypromise()
  console.log(data)
  return data
}


var x = mygen()

var y = x.next()

// 利用next(data)的特性可以将generetor中的promise展开,直接更改yeild执行上下文的返回变量值
// 这个技巧被用在mobx-state-tree中的flow上
y.value.then(data => {
  x.next(data)
})


// 实现一个flow
function flow(gen, args) {
  let _gen = gen(args);

  function _next(h) {
    if (h.done) {
      console.log(‘flow end!!‘)
      return h.value;
    }
    if (h.value instanceof Promise) {
      h.value.then(res  => {
        _next(_gen.next(res))
      })
    } else {
      _next(_gen.next(h.value))
    }
  }

  return _next(_gen.next())
}

function* chains(){
  var data1 = yield Promise.resolve({x: "flow1"})

  console.log(‘data1: ‘, data1)

  var x = data1.x;

  console.log(‘x: ‘, x)

  var data2 = yield x + " ==> flow2";

  console.log(‘data2: ‘, data2)

  return data2
}


// 执行这个flow, 有意思的事情来了
flow(chains)

js generator妙用

原文:https://www.cnblogs.com/magma/p/14955884.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!