Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically change the number of 'defer' calls in queue.js

My webpage lets the user plot multiple timeseries on a chart and I am using queue.js to go and asynchronously get this data, like so:

queue()
.defer(d3.json, "api/TransactionCost/?marketCode=" + marketCode1)
.defer(d3.json, "api/TransactionCost/?marketCode=" + marketCode2)
.defer(d3.json, "api/TransactionCost/?marketCode=" + marketCode3)
.await(onDataLoaded);

function onDataLoaded(error, json1, json2, json3) {
  // plot the 3 timeseries
}

I want the user to be able to request extra lines, if they wish, which will mean that I need to do extra 'defer' calls. I'd like to know how to dynamically append extra 'defer' calls (if it's possible) and also how to create the 'onDataLoaded' function so that it can handle a variable amount of parameters.

like image 284
ninjaPixel Avatar asked Dec 25 '22 13:12

ninjaPixel


1 Answers

I'd like to know how to dynamically append extra 'defer' calls (if it's possible)

Use a variable for the queue, and dynamically append defer calls to it:

var q = queue();
for (/* each file */)
    q = q.defer(d3.json, filename);
q.await(onDataLoaded);

how to create the 'onDataLoaded' function so that it can handle a variable amount of parameters.

You can use the arguments object to access a variadic amount of parameters. In your case, it would look like

function onDataLoaded(error) {
    if (!error) {
        // Either simply loop them:
        for (var i=1; i<arguments.length; i++)
            … arguments[i] …
        // or slice them into an array:
        var jsons = Array.prototype.slice.call(arguments, 1);
        …
    } else { … }
}
like image 182
Bergi Avatar answered Jan 05 '23 18:01

Bergi