0

I have a function that shows me all from object.

queries = {
  "info": {
    "query": "SELECT ...",
    "id": "10"
  },
  "info2": {
    "query": "INSERT ...",
    "id": "12"
  },
  "infoN": {
    "query": "DELETE ...",
    "id": "123"
  }
}

for (var [key, value] of Object.entries(queries)) {
    let name = key;
    let query = value.query;
    let id = value.id;

    console.log(name);
    console.log(query);
    console.log(id); 
    //setTimeout(function() { }, 3000);
}

But I need to to show first object and after 3 sec another and so on. How can I loop them with setTimeout? Or something similar?

Sato Takeru
  • 1,669
  • 4
  • 12
  • 27
Vova
  • 750
  • 11
  • 26

2 Answers2

0

The simplest way is to just use a different delay in each call of setTimeout

let counter = 1
for (...){
    setTimeout(function() { }, 3000 * counter++);
}

Since Object.entries returns an Array, we could also use Arrray.entries to get a iteration counter in the for statement.

queries = {
  "info": {
    "query": "SELECT ..."
  },
  "info2": {
    "query": "INSERT ..."
  },
  "infoN": {
    "query": "DELETE ..."
  }
}

for (let [counter, [key, value]] of Object.entries(queries).entries()) {
  const delay = (counter + 1) * 1000
  setTimeout(() => {
    console.log({
      counter,
      delay,
      key,
      value
    })
  }, delay)
}

Though I think setting counter directly is just as easy to read.

Håken Lid
  • 22,318
  • 9
  • 52
  • 67
0

Put all the console.log statements inside setTimeout.

queries = {
  "info": {
    "query": "SELECT ...",
    "id": "10"
  },
  "info2": {
    "query": "INSERT ...",
    "id": "12"
  },
  "infoN": {
    "query": "DELETE ...",
    "id": "123"
  }
}

var i = 1;

for (var [key, value] of Object.entries(queries)) {
    let name = key;
    let query = value.query;
    let id = value.id;
    setTimeout(function(){ 
        console.log(name);
        console.log(query);
        console.log(id); 
        }, 3000* i);
   i++;
}
TechySharnav
  • 4,869
  • 2
  • 11
  • 29