簡體   English   中英

JS中傳遞生成器函數的最佳實踐

[英]Best practice for passing through generator function in JS

我試圖找出將生成器(包括 yield)函數按原樣傳遞給另一個函數的最佳實踐。

換句話說,我正在尋找一種更好的方法來實現以下目標。

假設我有類ServiceAServiceB ,它們擁有相同的方法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 ,它使用類ServiceAServiceB ,而且還通過這些類的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方法的兩個問題:

  1. 除了yield我如何傳遞return
  2. 有沒有更好,更干凈的方法來實現它?
  1. 除了yield我如何傳遞return
* generate() {
    return yield* this.service.generate();
}
  1. 有沒有更好,更干凈的方法來實現它?
generate() {
    return this.service.generate();
}
 #service;
this.#service = …
return this.#service.generate();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM