Created
May 12, 2013 10:52
-
-
Save dandv/5563145 to your computer and use it in GitHub Desktop.
Why is it so cumbersome to do really simple things in node, like reading records from a file one by one?
In Perl, C, PHP, Java, whatever, you'd just run:
while ( record = file.fetch() ) { /* do stuff with record */ }
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*jslint node: true*/ | |
'use strict'; | |
var fs = require('fs'); | |
var csv = require('csv'); | |
var async = require('async'); | |
// note, io.listen(<port>) will create a http server for you | |
//var io = require('socket.io').listen(8901); | |
//io.sockets.on('connection', function (socket) { | |
// console.log("On connection"); | |
var handle = csv().from('day,temp\nMon,20\nTue,22\nWed,25\nThu,23', { columns: true }); | |
handle.fetch = function(howMany) { | |
var self = this; | |
console.error('Starting the fetch at', self.indexThatsNotBroken); | |
self.indexThatsNotBroken |= 0; | |
var stopAt = self.indexThatsNotBroken + howMany; | |
self | |
.transform( | |
function (record, index, callback) { | |
console.error(self.indexThatsNotBroken, record); | |
self.indexThatsNotBroken++; | |
if (self.indexThatsNotBroken >= stopAt) { return; } | |
process.nextTick(function () { | |
callback(); | |
}); | |
}, | |
{parallel: 1} | |
); | |
console.error('Stopped the fetch at', self.indexThatsNotBroken); | |
}; | |
async.series([ | |
function (callback) { | |
console.error('Async series call #1'); | |
handle.fetch(2); | |
callback(null, 1); | |
}, | |
function (callback) { | |
console.error('We are at', handle.indexThatsNotBroken); | |
callback(null, 1); | |
}, | |
function (callback) { | |
console.error('Async series call #2'); | |
handle.fetch(2); | |
console.error('We are at', handle.indexThatsNotBroken); | |
callback(null, 1); | |
}, | |
function (callback) { | |
console.error('Async series call #3'); | |
handle | |
.on("end", function () { | |
console.error("done"); // doesn't happen | |
}); | |
callback(null, 1); | |
} | |
]); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
i'm wondering the exact same thing, node appears to be importing entire large amounts of data before doing the next portion of execution