将生成器转换为正常功能

时间:2019-02-24 23:03:43

标签: javascript ecmascript-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 个答案:

答案 0 :(得分:4)

好吧,您可以删除星号和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
}