2016-12-05 1 views
2

Эй, ребята, я запускаю веб-сервер на узле + экспресс, и по какой-то причине мой код не выполняется каждые 10 минут, хотя у меня явно есть установленная функция setInterval. Это всего лишь один из 4-х кодов, которые я установил в своем файле сценария (например, serverScripts.js) прямо рядом с app.js, и я запустил его как с узлом serverScripts.js, так и навсегда использовал его, но он все еще не работаетКак сделать код исполнением непрерывно каждые 15 минут?

var APOD = (function() { 
    setInterval(function() { 
     async.waterfall([ 
      function Request(callback) { 
       let apodUrl = 'https://api.nasa.gov/planetary/apod?api_key='; 
       let api_key = '*censored*'; 
       request(apodUrl+api_key, function(err, apodData) { 
        if (err) throw err; 
        apodData = JSON.parse(apodData.body); 
        callback(null, apodData); 
       }); 
      }, 
      function GetTableItems(apodData, callback) { 
       let apodParams = { TableName: "APOD" } 
       db.scan(apodParams, (err,apodTable) => { 
        if (err) throw err; 
        callback(null, apodData, apodTable); 
       }); 
      }, 
      function CheckUniques(apodData, apodTable, callback) { 
       let tempArr = []; 
       for (let i = 0; i < apodTable.Items.length; i++) { 
        tempArr.push(apodTable.Items[i].title); 
       } 
       let IsItThere = _.includes(tempArr, apodData.title); 
       if (!IsItThere) { 
        setTimeout(function() { 
         let putParams = { 
          TableName: 'APOD', 
          Item: { 
           "title": apodData.title, 
           "date": apodData.date, 
           "description": apodData.explanation, 
           "hdurl": apodData.hdurl, 
           "media_type": apodData.media_type, 
           "url": apodData.url, 
           "copyright": apodData.copyright 
          } 
         } 
         db.put(putParams, (err) => { 
          if (err) throw err; 
          console.log(`\nAdded APOD item: ---"${apodData.title}"--- to the database.\n`); 
         }); 
        },1000); 
       } 
       else { console.log("No new APOD items."); } 
       callback(null); 
      } 
      ]); 
     APOD; 
    },600000); 
}()); 
+0

вопрос может быть не с 'setInterval', а может быть из-за некоторых сбоев в вашем коде. Пожалуйста, проверьте консоль – brk

+0

Вы можете установить некоторые задания CRON для достижения своей цели, если хотите. вы можете использовать https://www.npmjs.com/package/node-cron –

+1

Что означает «все еще не работает»? Это недостаточное описание вашей проблемы и какие шаги по устранению неполадок, которые вы уже предприняли, и что вы узнали на этих этапах. 'SetInterval()' не просто останавливается сам по себе. В вашем коде должна быть какая-то наблюдаемая или проверяемая ошибка. Вы устанавливаете точки останова на каждом этапе своего кода? Вы помещали инструкции 'console.log()' в свой код, чтобы отслеживать его прогресс и видеть, где дела идут. Здесь требуются этапы отладки элемента. – jfriend00

ответ

1

Я думаю, что в соответствии с вашим вопросом cron является лучшим совпадением, вы можете установить cron каждые 15 минут. https://www.npmjs.com/package/node-cron.

var cron = require('node-cron'); 

cron.schedule('0 0/15 * 1/1 * ? *', function(){ 
    console.log('running a task every 15 minutes'); 
}); 
+1

Что узел-cron предлагает OP, что 'setInterval()' в их уже запущенном процессе node.js не может быть прекрасным? – jfriend00

+0

это пакет nodejs, который мы можем использовать легко, так что вы можете вызвать api через 15 минут в соответствии с вашим требованием. cron специально используется для этого, так что мы можем легко обращаться с нашим API –

Смежные вопросы