循环内的if语句有效。但是在我添加“循环” /“重复”获取之后

我早些时候也发布了类似的问题,但是我不够简洁。 所以,我走了!

我正在从网站上获取一些数据(一组对象),然后循环通过它进行修改。 我之所以修改它,是因为我需要数组中每个对象内的新元素,以便以后在它们上运行一些“ 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)将完全不相关。 我也尝试在第一和第二之后再做第二个.thentime未更新。就像time(因此estimatedtime一样),我还有其他每次运行或结束获取操作都需要修改的变量。

bluemoon88888 回答:循环内的if语句有效。但是在我添加“循环” /“重复”获取之后

我不能百分百确定您所需要的逻辑,我只是​​在文档中添加一个元素并附加一个事件,并在需要更多数据时触发该事件。

我还创建了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);

本文链接:https://www.f2er.com/3166787.html

大家都在问