我試圖構建一個繪圖網頁,它從多個xively提要中獲取數據並用Rickshaw(基於D3)繪製它們。我遇到的問題是我無法訪問調用函數之外的服務器返回的數據。我是js的新手,所以我不確定如何處理調用的異步性質。我想致電xively.feed.history()
獲取歷史數據的各個部分,並將它們連接到一個圖表上。無論如何,這裏和我嘗試過的東西類似。它基於的xively tutorial多次調用xively.feed.history()
xively.setKey('xxxx my key ')
// Replace with your own values
var feedID = 12345678, // Feed ID
selector = "#myelement"; // Your element on the page
var series = [];
xively.feed.history(feedID, { duration: "10days", interval: 1800 ,limit: 1000}, function (mydata) {
mydata.datastreams.forEach(function(stream){
if ((stream.id == "tempinside") || (stream.id == "tempoutside")) {
var points = [];
stream.datapoints.forEach(function(datapoint){
points.push({x: new Date(datapoint.at).getTime()/1000.0, y: parseFloat(datapoint.value)});
// Add Datapoints Array to Graph Series Array
});
series.push({
name: stream.id,
data: points
});
};
});
var graph2 = new Rickshaw.Graph({
element: document.querySelector("#chart2"),
width: 600,
height: 400,
renderer: 'line',
series: [{
data: series[0].data,
name: series[0].name,
color: 'red'
},{
data: series[1].data,
name: series[1].name,
color: 'blue'
}]
})
})
正如我所說的,我是新來的JavaScript,所以也許我失去了一些東西。如果將圖放置在xively.feed.history
函數的回調部分內,則該圖工作正常。如果我試圖對函數進行多次調用,那麼在圖形代碼運行時數據就沒有準備好。