Simple explaining the exercise code.

Zed A. Shaw 7 months ago
parent cfadabb5ff
commit 54e0a00fe9
  1. 12
  2. 37

@ -0,0 +1,12 @@
# Exercise 01: CSV is Easy...Right?
This is exercise 01 of `JavaScript Level 2` in [Learn JavaScript the Hard Way]( It is meant to be done as a challenge with _incorrect_ starting code that you are expected to fix and improve. I repeat, this code is _incorrect_ on _purpose_ so you can fix it and attempt to do better.
* `step1.js` -- Use two projects to get CSV samples and try to write a simple parser that can parse all of the samples.
* `step2.js` -- This is a starter in case you are stuck, but it still fails and would fail on many CSV files. CSV is more complex than its name lets on.
* `step3.js` -- Take your parser and use the [deep-equal]( project to compare your results to the [csv-spectrum]( project's tests.
* `step4.js` -- Let's up the game and make this a unit test with [ava](, except it doesn't work because of promises/async/await not working with callbacks and events.
* `step5.js` -- First solution to `step4.js` that uses `Promise` directly to wrap callbacks and events.
* `step6.js` -- Second solution that uses [util.promisify]( to convert the `spectrum` callback to a `Promise` automatically.
If you attempt this challenge then point me at your solution at [@lzsthw]( and I'll take a look.

@ -0,0 +1,37 @@
import spectrum from "csv-spectrum";
import { parseString } from "fast-csv";
import { promisify } from "util";
import test from "ava";
const simple_parse = (raw_csv) => {
const rows = raw_csv.split("\n");
const result = [];
for(let row of rows) {
return result;
const spectrum_samples = promisify(spectrum);
test('spectrum samples match', async t => {
const samples = await spectrum_samples();
for(let sample of samples) {
const raw_csv = sample.csv.toString();
const good = [];
const count = await new Promise((res, rej) => {
.on('error', err => rej(err))
.on('data', row => good.push(row))
.on('end', rowCount => res(rowCount));
const ours = simple_parse(raw_csv);, good);