如何优化此数据馈送功能中的if语句?

时间:2018-03-20 03:37:34

标签: javascript

是否有更有效的方法来编写以下if语句&保持完全相同的效果?

让我们说这个dataRequest函数在每隔5秒触发一次的间隔内从内部运行。 每次请求时,dataRequest中都有新数据。 由于它现在存在,此代码为最新data.item_1分配一个值 - 然后(在每次迭代之后)将值从当前结果传递给历史变量,然后重新分配当前值。这会创建结果的历史记录,最多6个。

感觉效率低下&多余这样做,但我无法想出另一种方式。似乎不可持续,尤其是如果你有100个历史状态......

int main(){
    int fd, sd, num=0, sret, fret, maxfd;
    //fd_set readfds;
    //struct timeval timeout;

    if(mkfifo("atm1", 0666) == -1){...}
    if(mkfifo("atm2", 0666) == -1){...}
    if((fd = open("atm1", O_RDONLY)) == -1){...}
    if((sd = open("atm2", O_RDONLY)) == -1){...}

    while(1){
        if((sret = read(sd, &num, sizeof(num))) > 0){
             printf("%d\n", num);
        }
        if((fret = read(fd, &num, sizeof(num))) > 0){
             printf("%d\n", num);
        }
        if(sret <= 0 && fret <= 0){
             break;
        }
    }
    close(fd);
    close(sd);
    return 0;
}

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

改为添加到数组中。

const resultArr = [];
const dataRequest = function() {
  // ...
    const data = JSON.parse(request.response);
    resultArr.unshift(data.item_1.result); // or use push
  }
  // ...

然后,您可以通过resultArr[0]访问最新的结果,而较旧的结果会显示在其他标记中。

答案 1 :(得分:0)

将结果存储在数组中可能更容易

let result = new Array(8);
//
const dataRequest = function() {    
    let request;
    request = new XMLHttpRequest();
    request.open('GET', 'https://somedatafeed.com', true);
    request.onload = function() {
      if (request.status >= 200 && request.status < 400) {      
      data = JSON.parse(request.response)      
      // ...
      for(var i = result.length; i > 0; i--){
          if(result[i]) { result[i] = result[i-1]}
      }

      result[0] = data.item_1.result;
    } else {
      // error
    }
  };
  request.send();        
}