代码之家  ›  专栏  ›  技术社区  ›  greatTeacherOnizuka

将发电机转换为正常功能

  •  1
  • greatTeacherOnizuka  · 技术社区  · 6 年前

    我正在做一个项目,还有一些重构要做。对于内部决策,我们不想使用生成器,我遇到了这段代码(这看起来很奇怪,因为似乎根本不需要生成器)。如何将其转换为普通函数(据我所知,我不认为存在任何异步操作)?

    只是想说明一下,我不想在这段代码中使用生成器。

    const getResults = (totalData) => function* getNext() { 
        const combinations = totalData.reduce((a, b) => a * b.length, 1) 
        for (let i = 0; i < combinations; i++) { 
            yield createSolution(i, totalData) 
        } 
        return null 
    }
    

    这就是所谓的:

    const result = getResults(obj.elementsInObj);
    
        for (let data of result()) {
            const resolve = validateData(data, obj.elementsInObj)
            if (resolve) {
                return resolve
            }
        }
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Ele    6 年前

    你可以去掉星号 yield 运算符并创建一个内部数组来存储 solutions

    const getResults = (totalData) => {
      const combinations = totalData.reduce((a, b) => a * b.length, 1),
            arr = [];
      for (let i = 0; i < combinations; i++) arr.push(createSolution(i, totalData));
      return arr;
    }
    
    const results = getResults(obj.elementsInObj);
    for (let data of results) {
      const resolve = validateData(data, obj.elementsInObj)
      if (resolve) return resolve
    }