javascript - JS中通过生成器函数的最佳实践
问题描述
我试图找出将生成器(包括产量)函数按原样传递给另一个函数的最佳实践。
换句话说,我正在寻找一种更好的方法来实现以下目标。
假设我有类ServiceA
和ServiceB
,它拥有相同的方法generate
,生成一些序列:
class ServiceA extends ServiceBase {
// ...
* generate() {
const length = Math.round(Math.rand() * 100);
for (let i=0; i<length; i++)
yield i;
return -1;
}
// ...
}
class ServiceB extends ServiceBase {
// ...
* generate() {
const length = Math.round(Math.rand() * 100) + 100;
for (let i=100; i<length; i++)
yield i;
return 13;
}
// ...
}
现在,我有一个ServiceName
使用 class ServiceA
or的包装类ServiceB
,但也通过generate
这些类中的方法传递:
class ServiceManager {
#service;
constructor(serviceName) {
// The following require will return ServiceA or ServiceB instance
this.#service = require('./service/' + serviceName);
}
* generate() {
for ( let i of this.#service.generate() )
yield i;
}
// ...
}
扩展不是一种选择,因为这是我需要的设计模式。
generate
关于类内方法的两个问题ServiceManager
:
- 我如何通过
return
除了yield
? - 有没有更好更干净的方法来实现它?
解决方案
- 我如何通过
return
除了yield
?
* generate() {
return yield* this.service.generate();
}
- 有没有更好更干净的方法来实现它?
generate() {
return this.service.generate();
}
#service;
this.#service = …
return this.#service.generate();
推荐阅读
- node.js - 从 Node js 平台连接到 Ibm_db2 时出错
- python - 如何在硒(python)的chrome网页上缩小嵌入式谷歌地图
- clion - 将 CLion 与柯南测试集成
- tensorflow - 是否有任何解决方法可以在 TPU 上使用多个“正确”指标进行 keras 学习?
- derby - derby db升级文件权限问题
- c++ - Iceberg 类和 Google 单元测试
- python - 数组输出sql数据库中行数相同的结果集
- json - 如何根据特定变量从嵌套JSON中获取特定变量值
- f# - 活动模式的要点是什么?
- javascript - 如何正确返回 AJAX 数据