javascriptnode.jssteam

run setInterval for only 5 minutes?


so I have the following code.

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

basically it poles a steam trade offer to see if it has completed or not. However, this actually runs indefinitely, checking every 5 seconds until the program is time. What I was is for it to check every 5 seconds, for 5 minutes, after which it times out.

Any way I could go about doing that?


Solution

  • with interval I would to use something like this:

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

    but in this case I better to use setTimeout, because you using async request:

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