2016-12-05 114 views
2

嘿傢伙我在node + express上運行一個web服務器,由於某種原因,我的代碼並沒有每10分鐘執行一次,即使我清楚地在那裏設置了setInterval函數。這只是我在我的腳本文件(名爲serverScripts.js)中設置的4個代碼之一,緊挨着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是最好的搭配,你可以在每15分鐘後設置cron。 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

node-cron向OP提供了一個在他們已經運行的node.js進程中的'setInterval()'不能做得很好嗎? – jfriend00

+0

它是一個nodejs包,我們可以很容易地使用,以便您可以根據您的要求在15分鐘後調用api。 cron專門用於此目的,所以我們可以輕鬆處理我們的API –

相關問題