From bb6e9b0e382fca75ab73d588a91ef7d341f9ed51 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Mon, 18 Jul 2022 10:34:22 -0400 Subject: [PATCH] Implement step4 as a demo of how to deal with APIs that don't understand async using a promise. Remove useless await on simple_parse. --- 01-parse-a-csv-file/package.json | 2 ++ 01-parse-a-csv-file/step1.js | 1 - 01-parse-a-csv-file/step2.js | 4 ++-- 01-parse-a-csv-file/step3.js | 2 +- 01-parse-a-csv-file/step4.js | 37 ++++++++++++++++++++++++++++++++ 5 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 01-parse-a-csv-file/step4.js diff --git a/01-parse-a-csv-file/package.json b/01-parse-a-csv-file/package.json index b608a9e..4e8a734 100644 --- a/01-parse-a-csv-file/package.json +++ b/01-parse-a-csv-file/package.json @@ -10,8 +10,10 @@ "author": "", "license": "BSD", "dependencies": { + "ava": "^4.3.1", "csv-spectrum": "^1.0.0", "deep-equal": "^2.0.5", + "fast-csv": "^4.3.6", "neat-csv": "^7.0.0" } } diff --git a/01-parse-a-csv-file/step1.js b/01-parse-a-csv-file/step1.js index cb46a9b..d8f0cae 100644 --- a/01-parse-a-csv-file/step1.js +++ b/01-parse-a-csv-file/step1.js @@ -2,7 +2,6 @@ import spectrum from "csv-spectrum"; import csv from "neat-csv"; spectrum(async (err, samples) => { - for(let sample of samples) { const raw_csv = sample.csv.toString(); console.log("RAW CSV:\n", raw_csv); diff --git a/01-parse-a-csv-file/step2.js b/01-parse-a-csv-file/step2.js index 0e7278d..238bc80 100644 --- a/01-parse-a-csv-file/step2.js +++ b/01-parse-a-csv-file/step2.js @@ -17,12 +17,12 @@ const simple_parse = (raw_csv) => { } -spectrum(async (err, samples) => { +spectrum((err, samples) => { for(let sample of samples) { const raw_csv = sample.csv.toString(); console.log("RAW CSV:\n", raw_csv); - const parsed = await simple_parse(raw_csv); + const parsed = simple_parse(raw_csv); console.log("PARSED:\n", parsed); } }); diff --git a/01-parse-a-csv-file/step3.js b/01-parse-a-csv-file/step3.js index 4521775..057556f 100644 --- a/01-parse-a-csv-file/step3.js +++ b/01-parse-a-csv-file/step3.js @@ -17,7 +17,7 @@ spectrum(async (err, samples) => { for(let sample of samples) { const raw_csv = sample.csv.toString(); const good = await csv(raw_csv); - const ours = await simple_parse(raw_csv); + const ours = simple_parse(raw_csv); if(!equal(ours, good)) { console.error("EXPECTED", good, "\nGOT", ours); diff --git a/01-parse-a-csv-file/step4.js b/01-parse-a-csv-file/step4.js new file mode 100644 index 0000000..e354cc4 --- /dev/null +++ b/01-parse-a-csv-file/step4.js @@ -0,0 +1,37 @@ +import spectrum from "csv-spectrum"; +import { parseString } from "fast-csv"; +import test from "ava"; + +const simple_parse = (raw_csv) => { + const rows = raw_csv.split("\n"); + const result = []; + + for(let row of rows) { + result.push(row.split(',')); + } + + return result; +} + +test('spectrum samples match', async t => { + const samples = await new Promise((res, rej) => { + spectrum((err, samples) => res(samples)); + }); + + for(let sample of samples) { + const raw_csv = sample.csv.toString(); + const good = []; + + const count = await new Promise((res, rej) => { + parseString(raw_csv) + .on('error', rej()) + .on('data', row => good.push(row)) + .on('end', rowCount => res(rowCount)); + }); + + const ours = simple_parse(raw_csv); + + t.is(ours.length, count); + t.is(ours, good); + } +})