如果有变化,我的应用程序需要每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;
}
}
答案 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);