We use the traversable instance on List to reimplement Promise.all() type functionality.
For example we want to conver:
[Task] => Task([])
Conver array of Task, into Task of array value.
To do that we can use traverse.
Noraml Javascript array doesn't have traverse method, so we need to bring immutable-ext.
const fs = require('fs') const Task = require('data.task') const futurize = require('futurize').futurize(Task) const { List } = require('immutable-ext') const readFile = futurize(fs.readFile) const files = List(['box.js', 'config.json']) files.traverse(Task.of, fn => readFile(fn, 'utf-8')) .fork(console.error, console.log)
Here 'futurize' give us a easy way to wrap a function into a Task. We can do it manually as well:
/* const readFile = (filename, encode) => new Task((rej, res) => { return fs.readFile(filename, encode, (err, content) => { if (err) rej(err); res(content); }); });*/ const readFile = futurize(fs.readFile);