【发布时间】:2020-12-23 18:04:20
【问题描述】:
我有一个非常复杂的函数来描述一些迭代过程。它看起来像这样(我有很多与问题无关的代码):
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
有没有更惯用和简单的方法来达到同样的效果?
【问题讨论】:
标签: javascript typescript iterator generator yield