如何使此打字稿/ JavaScript代码更具“功能性编程风格”

时间:2020-04-24 16:43:28

标签: javascript typescript mongoose functional-programming csvtojson

我正在学习打字稿/ javascript,并正在探索函数式编程。对于有经验的javascript程序员来说,这里的某些代码很可能看起来只是错误的。所以基本上我正在尝试

  1. 流式传输远程文件-我使用got
  2. 将每个csv转换为json-我使用csvtojson
  3. 在这一点上,我可以单独写入mongodb,但这效率低下,因此我将其收集到5000个json对象的变量中,然后写入数据库。 -我使用mongoose

我不喜欢该全局变量,并且肯定有更好的方法来做我正在做的事情。另外,由于数据并不总是5000的倍数,因此我可能会有一些未写入的行。我也需要修复。谢谢。

import csv from "csvtojson";
import got from "got";
import { CountyDocument, County } from "../models/County";
import logger from "../util/logger";
import {BulkWriteOpResultObject} from "mongodb";

const writetoDataBase = (data: any,): Promise<BulkWriteOpResultObject> => {
    return County.bulkWrite(data);
};

let collect: Array<CountyDocument> = [];

function processIndividualRecord(data: CountyDocument, linenumber: number) {
    let prom;
    if (linenumber !== 0 && linenumber % 5000 === 0) {
        const copyarray = collect.map(x => {
            const upsertDoc = {
                updateOne: {
                    filter: { county: x.county, date: x.date, state: x.state },
                    update: { cases: x.cases, deaths: x.deaths, fips: x.fips },
                    upsert: true
                }
            };
            return upsertDoc;
        });
        prom = writetoDataBase(copyarray).then(value => {
            logger.debug(`writing to DB at ${linenumber}`);
        });
        collect = [];
    } else {
        collect.push(data);
        prom = Promise.resolve();
    }
    return prom;
};
export const saveschedule = () => {
    return csv().fromStream(got.stream(<some url>))
        .subscribe(processIndividualRecord, (err: CSVError) => {
            logger.error(`error processing the rows ${err.message} and the stack is ${err.stack}`);
            process.exit(1);
        }, () => {
            logger.info("DONE");
        });

};

0 个答案:

没有答案
相关问题