问题描述
我有一个非常复杂的函数,它描述了一些迭代过程。看起来像这样(我有很多与问题无关的代码):
function* functionName(
config: Config,poolSize: number
): Generator<[State,Step],boolean,void> {
/* ... */
for (const step of someOtherProcess()) {
/* ... */
yield [state,step]
switch (stateType) {
case StateType.Start:
if (/* ... */) {
return false
} else {
return true
}
case StateType.Invalid:
return false
}
}
return false
}
它执行三件事:(1)模拟某个过程,(2)提供该过程的每个步骤的信息(如您在yield
行中所见),以及(3)提供最终结果该过程完成时。显然,(3)和(2)是(1)的直接逻辑结果,这就是为什么我在一个功能中同时执行两个任务。
但是,虽然该函数的某些用户关心每个步骤(2),但其他一些用户仅关心最终结果(3)。
现在,我用这个:
const generator = functionName(config,poolSize)
let result
while (!(result = generator.next()).done) {}
return result.value as boolean
还有其他惯用且简单的方法来达到相同的结果吗?
解决方法
您不仅可以添加选项吗?
function* functionName(
config: Config,poolSize: number,yieldSteps = true
): Generator<[State,Step],boolean,void> {
/* ... */
for (const step of someOtherProcess()) {
/* ... */
if (yieldSteps) { yield [state,step] }
switch (stateType) {
case StateType.Start:
if (/* ... */) {
return false
} else {
return true
}
case StateType.Invalid:
return false
}
}
return false
}