setinterval Не обновляется / обновляется через наше приложение - Node.js - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь написать программу, которая собирает время ожидания тематического парка, чтобы попытаться создать базу данных для некоторой практики обработки данных. Я пытаюсь собрать эти данные из пакета themeparks node.js.

У меня больше опыта в R и Python, поэтому я учусь на лету. Теперь я дошел до того, что могу вывести файл .csv из указанного парка (-ов) в нужном мне формате, с именем файла, включающим дату, а заголовки - это название аттракционов для этого парка. и строки, содержащие время ожидания для поездки, с добавленной в конце отметкой времени, указывающей, когда было извлечено время.

В настоящее время у меня есть создаваемый файл, добавлен заголовок, затем каждые 3 секунды будут добавляться строки времени поездки (обычно 5 минут, но для целей тестирования он установлен на 3 секунды).

Проблема, с которой я сталкиваюсь, заключается в том, что в настоящее время мои метки времени не обновляются, и ни одно из них не является текущим.

Для дальнейшего планирования я планирую позже добавить определенное время, когда сбор времени закончится и начнется на основе часов парка, но сейчас я настроил его запуск при запуске приложения и запуск до бесконечности. Кроме того, я такой же фрагмент, работающий на 3 других парка (предположим, какие) в том же приложении, чтобы создать для них другие .csv, но, конечно, у них есть свои учетные данные для получения этих данных. Позже мы хотим, чтобы у каждого парка было свое приложение, которое основное приложение будет вызывать для запуска, но теперь они находятся в одном приложении и в основном имеют ту же структуру, что и этот фрагмент. На данный момент мне просто нужно знать, как получить время и данные для обновления, и почему это не так.

// include the Themeparks library
var Themeparks = require("themeparks");
var fs = require('fs');

//Date
var datetime = require('node-datetime');
var dt = datetime.create();
var TodayDate = dt.format('m-d-Y');
var TimeDate = dt.format('m-d-Y H:m');
var TimeStamp = "Time Stamp" //The Header for Time   Stamp




//************************ MAGIC KINGDOM     ***********************

 var disneyMagicKingdom = new     Themeparks.Parks.WaltDisneyWorldMagicKingdom



 disneyMagicKingdom.GetWaitTimes().then(function(rides) {
  for(var i=0 , ride; ride=rides[i++];) {
    // Write out the data in this format: "<RIDE     NAME>",<WAIT TIME>
    fs.appendFileSync('Magic Kingdom ' + TodayDate + '.csv', "\"" + ride.name + "\"" + ",");
  }
  //Goes to the next line in the csv, so the times will start on the next line.
  fs.appendFileSync('Magic Kingdom ' + TodayDate + '.csv', TimeStamp);
  fs.appendFileSync('Magic Kingdom ' + TodayDate + '.csv', '\r\n');

  //Repeats the Wait times interval
  setInterval(MKTime, 1000*3)

  function MKTime() {
    for(var i=0 , ride; ride=rides[i++];) {
      // Write out the data in this format: "<RIDE NAME>",<WAIT TIME>
      fs.appendFileSync('Magic Kingdom ' + TodayDate + '.csv', ride.waitTime  + ",");
      // Write out a new line so that when this loop repeats, the next row will be written on its own line
    }
    fs.appendFileSync('Magic Kingdom ' + TodayDate + '.csv', TimeDate);
    //Goes to the next line in the csv so when the next interval starts, the times will be on the next line
    fs.appendFileSync('Magic Kingdom ' + TodayDate + '.csv', '\r\n');
  }
}, console.error);

1 Ответ

0 голосов
/ 02 января 2019

Ваши переменные даты и времени создаются в начале блока кода, а не внутри функции, вызываемой setInterval.Таким образом, они будут такими, какими они были, когда выполнялся код, и не менялись при множественных вызовах setInterval.Простым решением было бы переместить эти переменные в функцию MKTime или определить новые переменные внутри этого метода.

...