[英]Best practice for passing through generator function in JS
I am trying to figure out the best practice of passing a generator (including yield) function through another function as is.我试图找出将生成器(包括 yield)函数按原样传递给另一个函数的最佳实践。
In other words, I am looking for a better way to achieve the following.换句话说,我正在寻找一种更好的方法来实现以下目标。
Let's say that I have class ServiceA
and ServiceB
, that own the same method generate
, that generates some sequences:假设我有类
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;
}
// ...
}
Now, I have a wrapper class ServiceName
that uses class ServiceA
or ServiceB
, but also, passing through the generate
method from these classes:现在,我有一个包装类
ServiceName
,它使用类ServiceA
或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;
}
// ...
}
And extension is not an option, as this is a design pattern I need.扩展不是一种选择,因为这是我需要的设计模式。
Two questions regarding the generate
method within class ServiceManager
:关于
ServiceManager
类中的generate
方法的两个问题:
return
in addition to yield
?yield
我如何传递return
?
- How do I passthrough a
return
in addition toyield
?除了
yield
我如何传递return
?
* generate() {
return yield* this.service.generate();
}
- Is there a better and more clean way to implement it?
有没有更好,更干净的方法来实现它?
generate() {
return this.service.generate();
}
#service;
this.#service = …
return this.#service.generate();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.