2.6 KiB
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 tostep4.js
that usesPromise
directly to wrap callbacks and events.step6.js
-- Second solution that uses util.promisify to convert thespectrum
callback to aPromise
automatically.
If you attempt this challenge then point me at your solution at @lzsthw and I'll take a look.
Learning Objectives
You aren't really learning about CSVs, but actually learning about how to deal with old APIs that use callbacks when you need Promises. The csv-spectrum
library uses an old style of operation that loads your data then calls a function for you to process the data. These days APIs need Promises, and use async/await to deal with the promises. Using what you learned from the previous module JavaScript Level 1
you learned quite a lot about async/await/Promise/callbacks so now you apply that knowledge to deal with csv-spectrum
.
If You Get Stuck
Remember the programming process of:
- Write comments in human language describing what the code should do.
- Write pseudo-code (p-code) under those comments to bridge from human to code.
- Slowly convert the p-code to JavaScript and run your script repeatedly while you do.
If you're stuck chances are you're not following this process. If you need a clue about how to handle the csv-spectrum
API then jump to the step5.js
file to see one way, and step6.js
to see another. Try to figure it out for yourself, and if you want a clue, remember that the resolve
parameter to a Promise can be called inside a callback.