我不知道如何使用setTimeout函數中的NodeJS。假設我想要:的NodeJS setTimeout函數
- 函數A()每10秒調用一次。
- 如果一個函數的從價值回調返回結果「真」,它會調用一個URL和DONE!
- 如果函數A keep返回值爲'false'的回調的結果,則保持呼叫,直到它收到'YES'達10分鐘
- 如果達到10分鐘最大值並且仍然沒有'true'結果,最後返回「假」
你怎麼做,在Node.js的請!
我不知道如何使用setTimeout函數中的NodeJS。假設我想要:的NodeJS setTimeout函數
你怎麼做,在Node.js的請!
簡單的例子(可能需要調整)
var timed_out = false,
timer = setTimeout(function() {
timed_out = true;
}, (1000*60*10)); // ten minutes passed
function A() {
call_func(function(result) { // call func with callback
if (result) {
clearTimeout(timer);
DONE();
}else if (! timed_out) {
setTimeout(A, 10000); // call again in 10 seconds
}
});
}
感謝時,如果(結果),你如何清除setTimeout的阻止它? –
@NamNguyen - 我真的不明白爲什麼你就必須清除任何超時的代碼,但我加了也無妨。 – adeneo
我其實不知道我們是否必須清除它,以及最佳實踐是什麼。感謝您的回答,這非常有幫助。 –
var tenMinutes = false; // my boolean to test the 10 minutes
setTimeout(function() { tenMinutes = true; }, 600000); // a timeout to set the boolean to true when the ten minutes are gone
function A() {
$.ajax({
url: "myURL",
method: "POST",
data: {},
success: function(myBool) {
if (!myBool && !tenMinutes) { // if false, and not ten minutes yet, try again in ten seconds
setTimeout(A, 10000);
}
else if (!myBool && tenMinutes) { // else, if still false, but already passed ten minutes, calls the fail function (simulates the return false)
myFailresponse();
}
else { // if the AJAX response is true, calls the success function (simulates the return true)
mySuccessResponse();
}
}
});
}
function mySuccessResponse() {
// you've got a "return true" from your AJAX, do stuff
}
function myFailResponse() {
// you've lots of "return false" from your AJAX for 10 minutes, do stuff
}
A(); // call the A function for the first time
這裏的另一種方法。您可以使用setInterval定期調用該函數。如果你獲得成功,做成功的東西並取消計時器。否則,只需取消限制達到的時間。
function a(){
console.log('a called');
return false;
}
var doThing = (function() {
var start,
timeout,
delay = 1000, // 1 second for testing
limit = 10000; // 10 seconds for testing
return function() {
if (!start) {
start = new Date().getTime();
timeout = setInterval(doThing, delay);
}
// Call a and tests return value
if (a()) {
// Do success stuff
// Set start to 0 so timer is cancelled
start = 0;
}
// stop timer if limit exceeded or start set to zero
if (new Date().getTime() > start + limit || !start) {
timeout && clearTimeout(timeout);
timeout = null;
start = null;
}
}
}());
doThing();
Node.js的setTimeout的是完全一樣的普通瀏覽器的JavaScript的setTimeout。也許發佈你的示例代碼什麼不工作。 – rasmusx
改爲查看setInterval,它允許您指定一個將每X秒調用一次的函數。要刪除它一旦你的功能完成後,保存到返回函數的引用和@adeneo我們可以使用clearInterval –