运行 setInterval 只设置5分钟?
run setInterval for only 5 minutes?
所以我有以下代码。
setInterval(function(){
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID["tradeofferid"] // The tradeoffer id
}, function(error, body) {
if (error == null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted"
} else {
//on not accepted
}
}
});
}, 5000);
基本上它会提出一个 steam 交易要约,看看它是否已经完成。然而,这实际上无限期地运行,每 5 秒检查一次,直到程序时间到。我是让它每 5 秒检查一次,持续 5 分钟,然后超时。
我有什么办法可以做到这一点吗?
见1-4
首先,获取调用 setInterval 之前的 start
时间
第二,保存timer_id
第三,获取current
计时器调用的时间
第四,获取时差,当超过5分钟时,停止计时。
var start = (new Date()).getTime(); // 1
var timer_id = setInterval(function(){ // 2
var current = (new Date()).getTime(); // 3
if((current - start)/1000 > 5*60) clearInterval(timer_id); // 4
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID["tradeofferid"] // The tradeoffer id
}, function(error, body) {
if (error == null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted"
} else {
//on not accepted
}
}
});
}, 5000);
将间隔分配给变量:var interval = setInterval;在 setInterval 之前定义当前时间:new Date()。在间隔内检查是否过了 5 分钟。如果是,请使用:clearInterval(interval).
var now = new Date();
var intervalId = setInterval(function(){
var currNow = new Date();
if ((currNow-now) / 60000 > 5) {
clearInterval(intervalId );
return;
}
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID["tradeofferid"] // The tradeoffer id
}, function(error, body) {
if (error == null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted"
} else {
//on not accepted
}
}
});
}, 5000);
您可以使用 setTimeout
。例如
var yourIntervalId = setInterval(function(){
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID["tradeofferid"] // The tradeoffer id
}, function(error, body) {
if (error == null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted"
} else {
//on not accepted
}
}
});
}, 5000);
这里您在 5 分钟(30000 毫秒)后清除间隔
setTimeout(function(){
clearInterval(yourIntervalId);
}, 30000);
间隔一段时间我会使用这样的东西:
var start = Date.now();
var theInterval = setInterval(function () {
if (Date.now() - start > 300000) {
clearInterval(theInterval);
return;
}
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID.tradeofferid // The tradeoffer id
}, function (error, body) {
if (error === null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted";
} else {
//on not accepted
}
}
});
}, 5000);
但在这种情况下我最好使用 setTimeout,因为你使用的是异步请求:
var start = Date.now();
function getData() {
if (Date.now() - start > 300000) {
return;
}
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID.tradeofferid // The tradeoffer id
}, function (error, body) {
setTimeout(getData, 5000);
if (error === null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted";
} else {
//on not accepted
}
}
});
}
getData();
所以我有以下代码。
setInterval(function(){
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID["tradeofferid"] // The tradeoffer id
}, function(error, body) {
if (error == null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted"
} else {
//on not accepted
}
}
});
}, 5000);
基本上它会提出一个 steam 交易要约,看看它是否已经完成。然而,这实际上无限期地运行,每 5 秒检查一次,直到程序时间到。我是让它每 5 秒检查一次,持续 5 分钟,然后超时。
我有什么办法可以做到这一点吗?
见1-4
首先,获取调用 setInterval 之前的 start
时间
第二,保存timer_id
第三,获取current
计时器调用的时间
第四,获取时差,当超过5分钟时,停止计时。
var start = (new Date()).getTime(); // 1
var timer_id = setInterval(function(){ // 2
var current = (new Date()).getTime(); // 3
if((current - start)/1000 > 5*60) clearInterval(timer_id); // 4
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID["tradeofferid"] // The tradeoffer id
}, function(error, body) {
if (error == null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted"
} else {
//on not accepted
}
}
});
}, 5000);
将间隔分配给变量:var interval = setInterval;在 setInterval 之前定义当前时间:new Date()。在间隔内检查是否过了 5 分钟。如果是,请使用:clearInterval(interval).
var now = new Date();
var intervalId = setInterval(function(){
var currNow = new Date();
if ((currNow-now) / 60000 > 5) {
clearInterval(intervalId );
return;
}
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID["tradeofferid"] // The tradeoffer id
}, function(error, body) {
if (error == null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted"
} else {
//on not accepted
}
}
});
}, 5000);
您可以使用 setTimeout
。例如
var yourIntervalId = setInterval(function(){
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID["tradeofferid"] // The tradeoffer id
}, function(error, body) {
if (error == null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted"
} else {
//on not accepted
}
}
});
}, 5000);
这里您在 5 分钟(30000 毫秒)后清除间隔
setTimeout(function(){
clearInterval(yourIntervalId);
}, 30000);
间隔一段时间我会使用这样的东西:
var start = Date.now();
var theInterval = setInterval(function () {
if (Date.now() - start > 300000) {
clearInterval(theInterval);
return;
}
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID.tradeofferid // The tradeoffer id
}, function (error, body) {
if (error === null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted";
} else {
//on not accepted
}
}
});
}, 5000);
但在这种情况下我最好使用 setTimeout,因为你使用的是异步请求:
var start = Date.now();
function getData() {
if (Date.now() - start > 300000) {
return;
}
steamOfferObj.getOffer({
"tradeOfferId": tradeOfferID.tradeofferid // The tradeoffer id
}, function (error, body) {
setTimeout(getData, 5000);
if (error === null) {
console.log(body);
if (body.response.offer.trade_offer_state == 3) {
return "Offer Accepted";
} else {
//on not accepted
}
}
});
}
getData();