Javascript 仅运行5分钟的设置间隔?
所以我有下面的代码Javascript 仅运行5分钟的设置间隔?,javascript,node.js,steam,Javascript,Node.js,Steam,所以我有下面的代码 setInterval(function(){ steamOfferObj.getOffer({ "tradeOfferId": tradeOfferID["tradeofferid"] // The tradeoffer id }, function(error, body) { if (error == null) { console.log(
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秒检查一次,直到程序运行完毕。我想让它每5秒检查一次,持续5分钟,然后超时
我可以这样做吗?见1-4
首先,在调用setInterval之前获取start
time
其次,保存timer\u id
第三,当计时器调用时,获取当前时间
第四,获取时差,当超过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之前定义当前时间:新日期()。在间隔时间内检查是否超过5分钟。如果有,请使用:clearInterval(interval)
您可以使用
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毫秒)后清除间隔
对于interval,我想使用如下内容:
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();
你必须使用
clearInterval
是的,那会更好XD哦。。有人(Xlander
)首先得到了这个答案。你知道为什么需要在这里使用Math.floor()吗?最后使用了你的setTimeout示例。谢谢
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);
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();