[英]Best practice for passing through generator function in JS
我試圖找出將生成器(包括 yield)函數按原樣傳遞給另一個函數的最佳實踐。
換句話說,我正在尋找一種更好的方法來實現以下目標。
假設我有類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
,它使用類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;
}
// ...
}
擴展不是一種選擇,因為這是我需要的設計模式。
關於ServiceManager
類中的generate
方法的兩個問題:
yield
我如何傳遞return
?
- 除了
yield
我如何傳遞return
?
* generate() {
return yield* this.service.generate();
}
- 有沒有更好,更干凈的方法來實現它?
generate() {
return this.service.generate();
}
#service;
this.#service = …
return this.#service.generate();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.