Я уже публиковал подобный вопрос ранее, но я не был достаточно кратким. Итак, я иду!
Я извлекаю некоторые данные, массив объектов с веб-сайта, а затем перебираю их, чтобы изменить. Я изменяю его исключительно потому, что мне нужны новые элементы внутри каждого объекта в массиве, чтобы потом выполнить на них некоторые «операторы if».
Я обнаружил, что мой цикл и операторы if работают нормально без функции fetch. Однако, когда я добавляю его, оператор if, который должен возвращать true, делает иначе.
Пример кода находится внизу.
Эта часть работает вне выборки, если я ее запускаюкак есть (после того, как я получил массив данных объектов. Я запустил код без выборки, и все было в порядке.)
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
после 1-го и 2-го тоже. time
не было обновлено. Как и time
(и, следовательно, estimatedtime
), у меня есть другие переменные, которые нужно изменять каждый раз, когда выборка запускается или завершается.