2016-06-28 165 views
0

我使用2個javascript函數從Kinvey中的數據庫中獲取數據。我想要執行第一個函數,並且下一個調用需要等待2秒才能執行。每次我使用的setTimeout我得到: 我的錯誤是:如何在express node.js中設置TimeTimeout?

TypeError: first._onTimeout is not a function 
    at Timer.listOnTimeout (timers.js:92:15) 

我的代碼是這樣的:

router.post('/datacol/getuserdata', (req, res) => { 
    request(
    { 
     url: kinveyurl + 'getPrivacyLevel', 
     method: 'POST', 
     json: { 
     "user_id" : req.body.user, 
     "sensors" : parseInt(req.body.sensor), 
     "contexts": parseInt(req.body.context), 
     "day_no" : parseInt(req.body.day), 
     "data_collectors": parseInt(req.user.type) 
     }, 
     auth: { 
     user: config.kinvey.appKey, 
     pass: config.kinvey.masterSecret, 
     sendImmediately: true 
     } 
    }, (err, resp, bod) => { 
    if(err) console.error(err) 
    console.log("User " + req.body.user + " Summarization Level = " + bod.summarization_level) 

    // This here should execute after 2 seconds!!! 
    // I try to set the timeout here!! 
    setTimeout(request(
     { 
     url: kinveyurl + 'getAccelerometerData', 
     method: 'POST', 
     json: { 
      "user_id" : req.body.user, 
      "summarization_level": parseInt(bod.summarization_level), 
      "day_no" : parseInt(req.body.day) 
     }, 
     auth: { 
      user: config.kinvey.appKey, 
      pass: config.kinvey.masterSecret, 
      sendImmediately: true 
     } 
     }, (err, resp, sensorData) => { 
     if(err) console.error(err) 
     console.log(sensorData) 
     res.render('datacolaccelerometer', { user : req.user, sensordata: sensorData }) 
    }),3000); 
    }) 
}) 

我是新來表達,我不知道放在哪裏。 總之,我想知道我應該在哪裏放置setTimeout,這樣我可以將第二次調用的執行延遲2秒,謝謝!

+0

包裝你'request'調用一個函數。 'setTimeout(function(){// your code here},3000);' –

+0

你可以使用我的代碼來顯示它嗎? – LoveMeow

+0

我不是很確定這是真正的問題,所以不要將它作爲答案添加。我的意思是,如上面評論中提到的,將'request(){//其餘代碼}'移到'function(){//將請求代碼粘貼到這裏}調用中。 –

回答

-1

這是使用的setTimeout()作爲記錄here

setTimeout(yourCallbackFunctionHere, 3000); 

所以,你的情況應該使用這樣使用它的正確方法:

setTimeout(function(){ 
    //your express code here 
}, 3000);