2014-02-10 1 views
4

queue.js 호출에서는 내가 가서 비동기 적으로 데이터를 얻을과 같이 할 queue.js을 사용하고 있습니다 :을 내 웹 페이지가 차트에 사용자 플롯 여러 시계열을 할 수

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 
} 

사용자가 원하는 경우 여분의 회선을 요청할 수 있기를 원합니다. 그러면 추가 '지연'전화를해야합니다. 동적으로 여분의 '지연'호출을 추가하는 방법을 알고 싶습니다. (가능한 경우)을 호출하고 'onDataLoaded'함수를 작성하여 다양한 양의 매개 변수를 처리 할 수있는 방법을 알고 싶습니다.

답변

9
나는 (가능하다면) 동적으로 사용을

큐의 변수를 추가 '연기'호출을 추가하는 방법을 알고, 그리고 동적으로 defer 호출을 추가하고 싶습니다

:

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

가변 매개 변수를 처리 할 수 ​​있도록 'onDataLoaded'함수를 만드는 방법.

가변 개수의 매개 변수에 액세스하려면 arguments object을 사용할 수 있습니다. 귀하의 경우에는

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 { … } 
} 
+0

굉장합니다. 고맙습니다! – ninjaPixel

+0

@Bergi : 첫 번째 코드 샘플에는 닫는'}'이 없습니다. – Hugolpz

+0

@Bergi : oo, 내가보기에 ('/ 각 파일 * /) q = q.defer (d3.json, filename); q.await (onDataLoaded);' 닫는'}'을 복원하는 대신 for 루프를 {{} 사용합니다. – Hugolpz

관련 문제