Node JS,完成后运行相同的功能

时间:2017-06-07 05:29:54

标签: javascript node.js asynchronous settimeout

如果有变化,我的应用程序需要每2秒轮询一次。现在我使用setInterval,但有时myFunction执行的时间超过2秒,而mysql数据库中的记录将被插入两次。我在myFunction中使用了异步库..

所以我需要这个......

当myFunction完成时

method.myFunction() =>

它需要再次运行(但仅在完成时)。使用x秒的setInterval不是一个选项。这是因为如果脚本花费的时间超过x秒,它们可以同时运行。

如何在x秒后再次运行myFunction,但仅在完成myFunction处理时才运行if method.myFunction == finished wait 2 seconds run method.myFunction again 所以在psuedo代码中就是这个

package com.example; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/ws") public class Controller { @RequestMapping(value="/req", method = RequestMethod.GET,produces="application/json") TestBean readBookmarks() { TestBean bean = new TestBean("Test", 25); return bean; } }

3 个答案:

答案 0 :(得分:3)

所以使用下面的代码,当函数执行结束时,你的方法将每秒调用一次。

function godMethod(){
    /* do what ever you want but call executor once you are done with everything */
    someCallbackForInsertion(data, function(){
        executor()
    })      
}

function executor(){
    setInterval(function(){
        godMethod()
    }, 2000);   
}

executor();

所以在这里你在启动服务器时调用执行程序,然后在2秒后调用godMethod然后执行插入/任何操作。成功插入后再次调用执行程序。

答案 1 :(得分:0)

使用回调,或者更好的是Promises,只有在前一个过程完成后才能执行下一个轮询。

答案 2 :(得分:0)

我用过修改过你的代码,就像魅力一样......



var backup_timeout_seconds = 5000;
var main_rest_seconds = 2000;
function godMethod(timeout){


    var backuptimeout = setTimeout(function(){
        godMethod(main_rest_seconds);
        console.log("Called backup timeout, script is stuck...");
    }, backup_timeout_seconds);


    
    Pollforbids.pollForNewBids2(,function (err,res) {
        executor(timeout);
        clearTimeout(backuptimeout);
    });



}





function executor(interval){
    setTimeout(function(){
        godMethod(interval);
    }, interval);

}

godMethod(main_rest_seconds);