Асинхронные данные для одноэлементного шаблона - PullRequest
0 голосов
/ 28 октября 2019

Меня попросили создать синглтон, который будет иметь методы, которые он будет обрабатывать с некоторыми данными, которые он хранит. Данные загружаются из ближайшего файла CSV, но я не могу найти способ сделать это асинхронным способом.

Это назначение JavaScript Vanilla. У меня есть этот CSV-файл, который я хочу загрузить / прочитать только один раз, а затем «держать» внутри моего синглтона. Поскольку все методы синглтона относятся к этим данным, я не думаю, что есть причина читать их более одного раза, в начале. Поскольку чтение (и разбор) - это асинхронная работа, как и некоторые ожидаемые методы, я не могу найти правильный способ / место / метод для этого. Поиск в интернете показывает, что если я решу создать класс, конструктор НЕ будет асинхронным. Шаблон IIFE у меня тоже не сработал ...

У меня сейчас нет кода, так как, к сожалению, ничего не работает.

Любая помощь будет высоко оценена!

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Есть несколько способов сделать это. Все подходы хороши, так что это личное предпочтение.

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')
0 голосов
/ 28 октября 2019

Вы можете добавить метод к вашему классу, который создает экземпляр класса с необходимыми данными, извлекшими файл CSV. Например:

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}
}
}

Дайте мне знать, имеет ли смысл,Я мог бы попытаться сделать более сложный пример для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...