Я пытаюсь создать модуль узла, который имеет некоторые вспомогательные функции для поиска справочных данных, которые у меня есть в файле CSV.Я использовал модуль csv-parser для загрузки его в объекты, и этот API, похоже, предназначен для использования с асинхронным потоковым считывателем / конвейером.Я не хочу, чтобы вспомогательные функции в этом модуле были доступны для любых других модулей до того, как эти справочные данные смогли загрузить.
Я пытался использовать Promise, но для того, чтобы егоработать, я должен был показать это обещание и функцию инициализации вызывающему модулю (ам), что не идеально.
// refdata.js
const fs = require('fs');
const csv = require('csv-parser');
var theData = new Array();
function initRefdata() {
return(new Promise(function(resolve, reject) {
fs.createReadStream('refdata.csv')
.pipe(csv())
.on('data', function(data) {theData.push(data);})
.on('end', resolve);}));
}
function helperFunction1(arg) { ... }
module.exports.initRefdata = initRefdata;
module.exports.helperFunction1 = helperFunction1;
// main.js
var refdata = require('./refdata.js');
function doWork() {
console.log(refdata.helperFunction1('Italy'));
}
refdata.initRefdata().then(doWork);
Это работает для этого единственного использования модуля справочных данных, но эторасстраивает то, что я не могу использовать функцию инициализации полностью внутри refdata.js.Когда я это делаю, асинхронный вызов потокового канала не завершается, прежде чем я начну использовать вспомогательные функции, которым нужны все данные, прежде чем они будут полезны.Кроме того, я не хочу перезагружать все данные CSV каждый раз, когда это необходимо.