运行setInterval只有5分钟?

Jak*_*ake 3 javascript node.js steam

所以我有以下代码.

 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);
Run Code Online (Sandbox Code Playgroud)

基本上它是一个蒸汽贸易报价,看看它是否已经完成.但是,这实际上无限期地运行,每5秒检查一次,直到程序结束.我的目的是每隔5秒检查一次,持续5分钟,然后超时.

我能以任何方式去做吗?

Xla*_*der 6

你可以用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);
Run Code Online (Sandbox Code Playgroud)

在这里你清除5分钟后的间隔(30000毫秒)

setTimeout(function(){
    clearInterval(yourIntervalId);
}, 30000);
Run Code Online (Sandbox Code Playgroud)


zb'*_*zb' 4

间隔一段时间我会使用这样的东西:

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);
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我最好使用 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();
Run Code Online (Sandbox Code Playgroud)