Je n'aime pas tout ce que j'ai vu jusqu'à présent ...Existe-t-il un modèle commun pour les modules de noeud qui doivent charger async de gros fichiers avant qu'ils ne soient utiles?
Module
import lineReader from 'line-reader'
let bigFile = './huge-file.csv'
export default class DooDad {
constructor() {
this.dictionary = new Map()
// Something like this seems like it'd be nice...
// await this.load()
}
load() {
return new Promise((resolve, reject) => {
lineReader.eachLine(bigFile, (line, last) => {
// this.dictionary = The contents of huge-file.csv
})
})
}
doStuff(foo) {
// Uses this.dictionary to do something interesting
// Problem: Unusable without first calling and waiting for this.load()
}
}
Utilisation
import DooDad from '../doodad'
let doodad = new DooDad()
// We have to first call and wait for load() before doodad is useable
doodad.load().then(x => {
doodad.doStuff()
})
On dirait que vous voulez soit voulez ...
1) Rendre le chargement synchrone
2) Faire unstatique fonctionsur Doodad qui retourne une promesse qui résout une nouvelle instance d'un Doodad
3) Faites le constructeur retourne une promesse (semble bizarre) Asynchronous constructor
4) Emet un événement lorsque le chargement effectué
5) Laisser comme il est
6) ????
Bons points. J'aime la synchronisation et quand cela n'a pas de sens, je suis vendu en usine sur la base de 'Ceci a l'avantage de ne pas avoir accès à l'objet'. – Jason
@Jason - Si cela répond à votre question, vous pouvez l'indiquer à la communauté en cliquant sur la coche à gauche de la réponse et aussi gagner des points de réputation pour suivre la procédure appropriée ici sur débordement de pile. – jfriend00