单例模式的异步数据

Async data for singleton pattern

我被要求创建一个单例,该单例将具有对它持有的某些数据进行操作的方法。数据是从附近的 CSV 文件加载的,但我找不到以异步方式执行此操作的方法。

这是原版 JavaScript 作业。 我有这个 CSV 文件,我只想加载/读取一次,然后 "hold" 在我的单例中。由于所有单身人士的方法都考虑这些数据,我认为没有理由在开始时多次阅读它。 由于读取(和解析)它是一个异步工作,一些预期的方法也是如此,我找不到正确的方式/地点/方法来完成它。 搜索互联网表明,如果我选择创建一个 class,则构造函数不能是异步的。 IIFE 模式对我也不起作用...

我目前没有代码,因为不幸的是似乎没有任何效果。

非常感谢任何帮助!

您可以向您的 class 添加一个方法,该方法构建一个 class 的实例,其中包含获取 CSV file.an 所需的数据 file.an 示例是这样的:

class Importer{ 
private importerInstance: Importer
private constructor(private csvData){
...
}

// returns an instance of the importer
static async composeInstance(path to CSV){

... retrieve file content asynchronously
if(!this.importerInstance) {return new Importer(<result of async csv fetching>)} else {return this.importerInstance}
}
}

如果有任何意义,请告诉我。我可以尝试为您做一个更详细的示例

有几种方法可以做到这一点。各种方法都可以,看个人喜好。

1。静态方法

class CsvHandler {
    static readFile(fileName) {
        return new Promise(resolve => {
             const instance = new CsvHandler()
             // Process your csv file here
             resolve(instance);
        }
    }
}
const csvHandler = CsvHandler.readFile('fileName.txt')

2。工厂方法

class CsvHandler {}

class CsvFactory {
    readFile(fileName) {
        return new Promise(resolve => {
             const instance = new CsvHandler()
             // Process your csv file here
             resolve(instance);
        }
    }
}

var csvFactory = new CsvFactory(),
    csvHandler = csvFactory.readFile('fileName.txt')