user7788113
user7788113

Reputation:

async and set timeout

I am having some problem using the settimeout() in my function. I am new to async. No matter how much I try I just can't make the timeout work. My code works perfect so that is not the problem. I need the request to execute every 10 seconds. Thanks for the help.

function getContent() {

function getPelicula(pelicula, donePelicula) {
            var peli = pelicula.title;

            //request id
            request({

              url: "http://api.themoviedb.org/3/search/movie?query=" + peli + "&api_key=3e2709c4c051b07326f1080b90e283b4&language=en=ES&page=1&include_adult=false",
              method: "GET",
              json: true,
            }, function(error, res, body) {
              if (error) {
                console.error('Error getPelicula: ', error);
                return;
              }
              var control = body.results.length;
              if (control > 0) {


                var year_base = pelicula.launch_year;
                var id = body.results[0].id;
                var year = body.results[0].release_date;
                var d = new Date(year);
                var year_solo = d.getFullYear();

                if (year_base == year_solo) {
                  pelicula.id = id;
                  pelicula.year_pagina = year_solo;

                }

              } else {
                pelicula.id = null;
                pelicula.year_pagina = null;
              }
              donePelicula();

            });
          }
}

Upvotes: 3

Views: 189

Answers (2)

Dzmtrs
Dzmtrs

Reputation: 446

To do something in a loop, use setInterval.

UPD:

In general, there're two ways of executing some code in loop

1 setTimeout :

var someTimer = setTimeout(function sayHello(){
    console.log("hello!");
    someTimer = setTimeout(sayHello, 2000);
}, 2000);

Notice that someTimer variable is needed to stop the looping process if you need: clearTimeout(someTimer)

2 setInterval:

var someIntervalTimer = setInterval(function(){
    console.log("I'm triggered by setInterval function!");
}, 2000);

Invoke clearInterval(someIntervalTimer) to stop the looping

Both functions are treated as properties of the global Window variable. By default, the following code works:

var window = this;
console.log("type of setTimeout: " + typeof window.setTimeout);
console.log("type of setInterval: " + typeof window.setInterval);

Upvotes: 3

MyRealNameIsBlaze
MyRealNameIsBlaze

Reputation: 115

Try putting it in another function so:

          domore(pelicula,donePelicula);

          function domore(pelicula,donePelicula) {

                // 1 second
                var timeout = 1000;
                for (var i = 1; i < pelicula.length; i++) {

                    createData(pelicula[i],donePelicula,timeout);
                    timeout = timeout + 800;

                }
            }

          function createData(peli,donePelicula,timeout) {
            setTimeout(function() { getData(peli,donePelicula); }, timeout);
          }


          function getData(peli,donePelicula) {
            var txtFile = new XMLHttpRequest();
            txtFile.open("GET", "http://api.themoviedb.org/3/search/movie?query=" + peli + "&api_key=3e2709c4c051b07326f1080b90e283b4&language=en=ES&page=1&include_adult=false", true);
            txtFile.onreadystatechange = function() {
                if (txtFile.readyState === 4) {  // Makes sure the document is ready to parse.
                    if (txtFile.status === 200) {  // Makes sure it's found the file.

                        allText =  txtFile.responseText;
                        domore(allText,donePelicula);

                    }
                }
            }
            txtFile.send(null);
          }

Upvotes: 0

Related Questions