Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅运行5分钟的设置间隔?_Javascript_Node.js_Steam - Fatal编程技术网

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();