我早些时候也发布了类似的问题,但是我不够简洁。 所以,我走了!
我正在从网站上获取一些数据(一组对象),然后循环通过它进行修改。 我之所以修改它,是因为我需要数组中每个对象内的新元素,以便以后在它们上运行一些“ if语句”。
我发现没有fetch函数,我的循环和if语句也可以正常工作。但是,当我添加它时,否则应该返回true的if语句。
示例代码在底部。
如果我按原样运行它,那么它是在提取操作之外起作用的部分(在我获得对象的数据数组之后。我在不提取代码的情况下运行了代码,这一切都很好。)
if (time < new Date(new Date(Date.now()).toLocaleString('en-US', {timeZone: 'UTC'}))) {
var time = new Date(new Date(Date.now()).toLocaleString('en-US', {timeZone: 'UTC'}))
//changing time with current time in UTC if time is "smaller"
} else {
//do nothing
}
for (let i = 0; i < data.length; i++) {
data[i]['ontime'] = (new Date(new Date(data[i].starttime).toLocaleString('en-US', {timeZone: 'UTC'})))
data[i]['estimatedtime'] = dateAdd(new Date(time), 'second', Math.round(data[i].distance.value / 50 * 60 * 60))
for (let j = 0; j < data.rooms.length; j++) {
/*push and save some elements*/
}
if (data[i].ontime > data[i].estimatedtime) {
//do something
} else { // repeat fetch if the condition is false
console.log('unsuitable!')
getData()
}
}
我试图做两个循环。 一个用于突变数据数组的对象,另一个用于if语句 +我在这两个单独的循环中使用了asynch / await函数,以确保第二个循环(if语句)仅在第一个循环结束后才开始。它似乎没有用。 以前,我发帖说错误是与日期有关的,它显示了“无效的日期”。我已解决该问题,但仍然存在相同的问题。
var errorcheck = []
time = new Date('11/2/2019 14:25')
function getData() {
fetch(fetch_url)
.then((response) => {
if (!response.ok) {
errorcheck.push(response.status)
} // if response is not ok, i store the error code.
else if (response.ok) {
response.json()
.then(data => data = data)
.then(() => {
if (data.length > 0) { // checking if any "data array" has objects
if (time < new Date(new Date(Date.now()).toLocaleString('en-US', { timeZone:'UTC'}))) {
var time = new Date(new Date(Date.now()).toLocaleString('en-US', { timeZone:'UTC'}))
//changing time with current time in UTC if time is "smaller"
} else {
//do nothing
}
for (let i = 0; i < data.length; i++) {
data[i]['ontime'] = (new Date(new Date(data[i].starttime).toLocaleString('en-US', {timeZone: 'UTC'})))
data[i]['estimatedtime'] = dateAdd(new Date(time), 'second', Math.round(data[i].distance.value / 50 * 60 * 60))
for (let j = 0; j < data.rooms.length; j++) {
/*push and save some elements*/
}
if (data[i].ontime > data[i].estimatedtime) {
//do something
} else { // repeat fetch if the condition is false
console.log('unsuitable!')
getData()
}
}
} else {
console.log('no object in data!')
getData() //if data array had no objects inside, i repeat the fetch
}
})
}
})
}
我已经取出了下一个代码,并且在提取时也可以正常工作。
if (time < new Date(new Date(Date.now()).toLocaleString('en-US', { timeZone:'UTC'}))) {
var time = new Date(new Date(Date.now()).toLocaleString('en-US', { timeZone:'UTC'}))
//changing time with current time in UTC if time is "smaller"
} else {
//do nothing
}
我还需要此代码在每次运行提取时也要运行。否则,时间戳(estimatedtime
)将完全不相关。
我也尝试在第一和第二之后再做第二个.then
。 time
未更新。就像time
(因此estimatedtime
一样),我还有其他每次运行或结束获取操作都需要修改的变量。
答案 0 :(得分:0)
我不能百分百确定您所需要的逻辑,我只是在文档中添加一个元素并附加一个事件,并在需要更多数据时触发该事件。
我还创建了myApp
来保存值,而不是多个全局变量。
var myApp = myApp || {
errorcheck: []
};
// these could be in the object above like the errorcheck is
myApp.lastTimestamp = new Date();
myApp.fetch_url = "some/urlthing";
myApp.time = new Date.UTC();
var aNewDivElement = document.createElement("div", {
id: "newDivElement"
});
var getMoreDataEvent = new Event('getMoreData');
aNewDivElement.addEventListener('getMoreData', function(e) {
myApp.getData();
}, false);
document.body.appendChild(aNewDivElement);
var divHoldEvents = document.getElementById("newDivElement");
myApp.getData = function() {
fetch(myApp.fetch_url)
.then(function(response) {
if (response.ok) {
let data = response.json();
// checking if any "data array" has objects
if (data.length > 0) {
myApp.myUtcDateTime = new Date.UTC();
if (myApp.time < myApp.myUtcDateTime) {
myApp.time = myApp.myUtcDateTime;
}
for (let i = 0; i < data.length; i++) {
// seems odd to do these, do we mean the new array?
data[i].ontime = myApp.myUtcDateTime;
let est = dateAdd(new Date(myApp.time), 'second', Math.round(data[i].distance.value / 50 * 60 * 60));
data[i].estimatedtime = est;
for (let j = 0; j < data.rooms.length; j++) {
/*push and save some elements*/
}
if (data[i].ontime > data[i].estimatedtime) {
//do something
} else { // repeat fetch if the condition is false
console.log('unsuitable!');
divHoldEvents.dispatchEvent(getMoreDataEvent);
}
}
} else {
console.log('no object in data!');
//if data array had no objects inside, i repeat the fetch
divHoldEvents.dispatchEvent(getMoreDataEvent);
}
} else {
// if response not ok, store the error code.
this.errorcheck.push(response.status);
}
});
};
// start things off
divHoldEvents.dispatchEvent(getMoreDataEvent);