Well that totally is the correct answer :) But now I can't figure out why?
Running your code returned true which helped figure it out. console.log(results[0] === results[1]); I then tried to take a deep copy of the body object and passing that into the callback like so... and voila... the response looks correct. return callback(err, JSON.parse(JSON.stringify(body))); On Monday, 26 January 2015 10:22:37 UTC-5, Justin Maat wrote: > > Sorry for the title, but I can't think of an easier way to word this. > > I'm trying to use the async library <https://github.com/caolan/async#map> > with > Node.js to run 3 asynchronous functions and do some operation on the > results of all 3. From what I understand, the map() function allows me to > run all 3 and apply an argument to an iterator, then provide a callback to > operate on the results of all 3 async functions (stored in an array). > > The results are showing 3 successful responses, but they all contain the > data from that last (3rd) function run, the other 2 are overwritten for > some reason. > > For example, > > /**map the array of exchange names through the iterator function > * xchange is an external library which has functions of the form - > * xchange.bitstamp.ticker(callback), > xchange.bitfinex.ticker(callback), etc.. > */ > var xchange = require("xchange.js"), > async = require("async"); > > async.map([ "bitfinex", "bitstamp", "okcoin" ], > function(item, callback) { > xchange[item].ticker(function(err, body) { > console.log("item: " + item); > console.log(body); > > return callback(err, body); > }); > }, function(err, results) { > console.log(results); > }); > > > //print out > item: bitstamp > { bid: 275.16, > ask: 275.21, > low: 245, > high: 309.9, > volume: 54017.1092978, > timestamp: 1422283998 } > item: okcoin > { bid: 279.25, > ask: 280.44, > low: 242.93, > high: 310.57, > volume: 29342.543, > timestamp: 1422284015 } > item: bitfinex > { bid: 279.2, > ask: 279.77, > low: 246.59, > high: 315, > volume: 165380.17021898, > timestamp: 1422284011.1361156 } > > //Why are these all from the last run? Should be the results of all 3 > above > [ { bid: 279.2, > ask: 279.77, > low: 246.59, > high: 315, > volume: 165380.17021898, > timestamp: 1422284011.1361156 }, > { bid: 279.2, > ask: 279.77, > low: 246.59, > high: 315, > volume: 165380.17021898, > timestamp: 1422284011.1361156 }, > { bid: 279.2, > ask: 279.77, > low: 246.59, > high: 315, > volume: 165380.17021898, > timestamp: 1422284011.1361156 } ] > > > Basically the xchange ticker function uses the [request][2] module to call > an http request on each ticker api. The results (somewhat transformed) are > returned. > > I'm able to run the following code > <https://gist.github.com/jxm262/c32cf5ede3c1d5e4bfd6> with no errors, so > I'm certain it has something to do with my xchange library code. > > Any tips or ideas on what could cause this? > > > -- Job board: http://jobs.nodejs.org/ New group rules: https://gist.github.com/othiym23/9886289#file-moderation-policy-md Old group rules: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/nodejs/3070062e-598c-48cf-be22-cfbc23a7e478%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
