我早些时候也发布了类似的问题,但是我不够简洁。 所以,我走了!
我正在从网站上获取一些数据(一组对象),然后循环通过它进行修改。 我之所以修改它,是因为我需要数组中每个对象内的新元素,以便以后在它们上运行一些“ 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),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'}))
//changing time with current time in UTC if time is "smaller"
} else {
//do nothing
}
我还需要此代码在每次运行提取时也要运行。否则,时间戳(estimatedtime
)将完全不相关。
我也尝试在第一和第二之后再做第二个.then
。 time
未更新。就像time
(因此estimatedtime
一样),我还有其他每次运行或结束获取操作都需要修改的变量。