Javascript 在同步函数和for循环中获取API var lineArr=[]; var MAX_LENGTH=10; var持续时间=500; var chart=realTimeLineChart(); 函数getData(){ fetch('./getRealTimeData')。然后((response)=>response.json() 。然后((数据)=>{ 返回数据; })); } 函数seedData(){ var now=新日期(); 对于(变量i=0;i30){ lineArr.shift(); } d3.选择(“#图表”).datum(lineArr).call(图表); } 函数resize(){ if(d3.select(“#chart svg”).empty()){ 返回; } 图表宽度(+d3.选择(“图表”)。样式(“宽度”)。替换(/(px)/g,”); d3.选择(“图表”)。调用(图表); } document.addEventListener(“DOMContentLoaded”,function()){ 种子数据(); window.setInterval(updateData,250); d3.选择(“#图表”).datum(lineArr).call(图表); d3.选择(窗口)。打开('resize',resize); });
结果:Javascript 在同步函数和for循环中获取API var lineArr=[]; var MAX_LENGTH=10; var持续时间=500; var chart=realTimeLineChart(); 函数getData(){ fetch('./getRealTimeData')。然后((response)=>response.json() 。然后((数据)=>{ 返回数据; })); } 函数seedData(){ var now=新日期(); 对于(变量i=0;i30){ lineArr.shift(); } d3.选择(“#图表”).datum(lineArr).call(图表); } 函数resize(){ if(d3.select(“#chart svg”).empty()){ 返回; } 图表宽度(+d3.选择(“图表”)。样式(“宽度”)。替换(/(px)/g,”); d3.选择(“图表”)。调用(图表); } document.addEventListener(“DOMContentLoaded”,function()){ 种子数据(); window.setInterval(updateData,250); d3.选择(“#图表”).datum(lineArr).call(图表); d3.选择(窗口)。打开('resize',resize); });,javascript,asynchronous,fetch-api,Javascript,Asynchronous,Fetch Api,结果: var lineArr = []; var MAX_LENGTH = 10; var duration = 500; var chart = realTimeLineChart(); function getData() { fetch('./getRealTimeData').then((response) => response.json() .then((data) => { return data; })); } function
var lineArr = [];
var MAX_LENGTH = 10;
var duration = 500;
var chart = realTimeLineChart();
function getData() {
fetch('./getRealTimeData').then((response) => response.json()
.then((data) => {
return data;
}));
}
function seedData() {
var now = new Date();
for (var i = 0; i < MAX_LENGTH; ++i) {
let data = getData();
lineArr.push({
time: new Date(now.getTime() - ((MAX_LENGTH - i) * duration)),
x: data.x,
y: data.y,
z: data.z
});
}
}
function updateData() {
var now = new Date();
let data = getData();
var lineData = {
time: now,
x: data.x,
y: data.y,
z: data.z
};
lineArr.push(lineData);
if (lineArr.length > 30) {
lineArr.shift();
}
d3.select("#chart").datum(lineArr).call(chart);
}
function resize() {
if (d3.select("#chart svg").empty()) {
return;
}
chart.width(+d3.select("#chart").style("width").replace(/(px)/g, ""));
d3.select("#chart").call(chart);
}
document.addEventListener("DOMContentLoaded", function() {
seedData();
window.setInterval(updateData, 250);
d3.select("#chart").datum(lineArr).call(chart);
d3.select(window).on('resize', resize);
});
rt_st.js:19未捕获类型错误:无法读取未定义的属性“x”
在seedData(rt_st.js:19)
在HTMLDocument。(rt_st.js:53)
因为fetch是异步的,所以在同步上下文中使用它可能会有很多问题,所以我不明白如何在执行对服务器的请求时让这个getData()函数等待?或者我可以用什么来代替?或者我应该用别的东西,而不是拿东西?
异步函数可以包含等待表达式
暂停异步函数的执行并等待
已通过承诺的解决方案,然后恢复异步函数的
执行并返回已解析的值
将
async
关键字添加到所有使用getData()
的函数中,并在调用getData()
时使用wait
关键字:
rt_st.js:19 Uncaught TypeError: Cannot read property 'x' of undefined
at seedData (rt_st.js:19)
at HTMLDocument.<anonymous> (rt_st.js:53)
async function seedData() {
// ...
let data = await getData();
// ...
function updateData() {
var now = new Date();
let data = await getData();
// ...