ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

js generator妙用

2021-06-30 18:31:06  阅读:276  来源: 互联网

标签:妙用 generator flow value next var js data gen


/**
 * 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)

标签:妙用,generator,flow,value,next,var,js,data,gen
来源: https://www.cnblogs.com/magma/p/14955884.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有