Partage
  • Partager sur Facebook
  • Partager sur Twitter

Retouner résultat dans une autre function

13 décembre 2018 à 15:22:08

Bonjour,

J'apprends à faire des itérations, je commence à comprendre le fonctionnement.

Cependant je souhaiterais afficher le résultat de "cle" dans une nouvelle fonction qui est sender. Il me retourne le dernier cle à chaque fois ...

J'ai:                Ce que je souhaite: 

789                          123

789                          456

789                          789

var arr=
       [
          {
          "region": "eu",
          "Value": "market",
          "key" : "123",
          },
          {
          "region": "us",
          "Value": "place",
          "key" : "456",
          },
          {
          "region": "test",
          "Value": "test",
          "key" : "789",
          }
       ]

for (var i=0; i< arr.length;i++){
  var obj = arr[i]
  console.log(arr[i].region);
  console.log(arr[i].Value);
  cle = arr[i].key;
  console.log(cle);
  for(var nb in obj){
    var value = obj[nb]
}

setTimeOut(sender,10000);

// Partie ou je bloque
function sender(){
  console.log(cle)
}

}

Merci d'avance pour votre aide :)

  • Partager sur Facebook
  • Partager sur Twitter
13 décembre 2018 à 16:08:27

C'est normal, la boucle s’exécute et à la fin de celle ci la variable globale "cle" vaut 789. Donc si exécutée après cette boucle, la fonction sender affichera toujours 789.

C'est quoi ton but? Afficher la valeur de la propriété clé de chaque objet de ton array avec une périodicité de 10s entre l'affichage de chaque clé? Apprendre comment passer une variable à une fonction? Comprendre comment fonctionne setTimeout (o minusucle au passage)?

  • Partager sur Facebook
  • Partager sur Twitter
13 décembre 2018 à 19:59:14

Bonjours,

D'après ce que je comprend de ton message tu souhaite afficher toute les 10000ms une key de ta variable arr.
Dans ton code, ce qui ce passe, comme mon vdd la dit, c'est que la boucle a déjà fini de tourner lorsque tu demande l'affichage de l'une des valeurs.

Pour éviter cela, la méthode est relativement simple, tu crée une boucle... de fonction.
En bref c'est comme une boucle, sauf que tu peut repousser "le prochain tour de la boucle" grâce a un setTimeout.

Voici un exemple simple :

var arr= [
	{"region":"eu", "value":"market", "key" :"123"},
	{"region":"us", "value":"place", "key":"456"},
	{"region":"test", "Value":"test", "key":"789"}
];

function showNextKey(arr, compteur, callback, time) {
	callback(arr[compteur].key);
	compteur++;
	if(compteur<arr.length) {
		window.setTimeout(showNextKey, time, arr, compteur, callback, time);
} }; function sender(key) { console.log(key); }; window.setTimeout(showNextKey, 10000, arr, 0, sender, 10000);
  • Partager sur Facebook
  • Partager sur Twitter

    !