fonction waitFor Javascript

Dans le cadre d’un développement d’assistant de réservation d’une des application de Lucca dont je vais faire un article prochainement, j’ai eu à gérer un problème javascript qui apparaît surtout quand on utilise le Asynchrone de l’AJAX. En gros, dans certains cas, le contenant devant se remplir de son contenu n’est pas pret quand le contenu arrive ! et il faut attendre un peu, mais sans bloquer le navigateur, que les choses se fassent pour passer à la suite.

La fonction waitfor permet de tenter une action plusieurs fois :

  1.         //waitFor(function(){myState.ParticipantClicked();}, function(){ return $(‘icone_participants’)}, 100, DateAdd(‘s’,1,(new Date()))))
  2.         function waitFor(fonctionAExecuter, condition, interval, fin){
  3.                 if (condition()) fonctionAExecuter();
  4.                 else{
  5.                         if(compareObjDate(fin,(new Date()),‘DIFF’)>0) setTimeout(function(){waitFor(fonctionAExecuter, condition, interval, fin);},interval);
  6.                 }
  7.         }
  8.         //nb = compareObjDate(newDate,(new Date()),’DIFF’)
  9.         function compareObjDate(date_1, date_2, operateur){
  10.             diff = date_1.getTime()-date_2.getTime();
  11.             if (diff>0){
  12.                 date_min = date_2;
  13.                 date_max = date_1;
  14.             }else if (diff<0){
  15.                 date_min = date_1;
  16.                 date_max = date_2;
  17.             }
  18.             if (operateur == ‘MIN’) return date_min
  19.             if (operateur == ‘MAX’) return date_max;
  20.             if (operateur == ‘DIFF’) return (diff==0?diff:diff/Math.abs(diff));
  21.         }
  22.         //DateAdd(‘ms’,100,dateObj))
  23.         //DateAdd(‘d’,1,dateObj))
  24.         function DateAdd(timeU,byMany,dateObj) {
  25.                 var millisecond=1;
  26.                 var second=millisecond*1000;
  27.                 var minute=second*60;
  28.                 var hour=minute*60;
  29.                 var day=hour*24;
  30.                 var year=day*365;
  31.                 var newDate;
  32.                 var dVal=dateObj.valueOf();
  33.                 switch(timeU) {
  34.                         case « ms »: newDate=new Date(dVal+millisecond*byMany); break;
  35.                         case « s »: newDate=new Date(dVal+second*byMany); break;
  36.                         case « mi »: newDate=new Date(dVal+minute*byMany); break;
  37.                         case « h »: newDate=new Date(dVal+hour*byMany); break;
  38.                         case « d »: newDate=new Date(dVal+day*byMany); break;
  39.                         case « y »: newDate=new Date(dVal+year*byMany); break;
  40.                 }
  41.                 return newDate;
  42.         }

Une autre approche consiste à envoyer en parametre d’une premiere fonction, la fonction a éxécuter en retour, mais pour celà, il faut une execution plutot linéaire…

les deux fonctions de gestion de date (compareObjDate et DateAdd) ont été reprises (http://www.codingforums.com/showthread.php?t=3955 et http://www.commentcamarche.net/forum/affich-1987996-javascript-convertir-une-date-et-comparer) et en partie modifiée

Meuble de rangement en pin sixième étape…

Le grand moment de l’assemblage de la deuxième partie est arrivé. On le sentait venir depuis quelques jours, mais c’est ce soir qu’il a voulu voir le jour !


Assemblage à l’aide d’une sangle à l’endroit où les étagères sont l’une en face de l’autre (erreur de conception…), serre-joints pour le reste.

Après avoir égalisé les pieds pour s’adapter au parquet, voici le moment de l’assemblage final, et là, vous ne m’empecherez pas de penser au viaduc de Millau, lors de l’assemblage des deux tabliers au dessus de 300m de vide.

 

Ensuite, le rangement de la pièce et le montage des étagères sur picots pour optimiser les espaces..


Le bureau d’angle est placé là de façon temporaire, il reste effectivement à faire une planche qui va bien dans cet angle !

En attendant, on a mis un fauteuil :


Une femme qui lit HM Diffusion, mais que demander de plus ?


Détail sur le support IKEA de l’aspirateur

Plus qu’une étape : le bureau avec le problème de l’aération de l’ordinateur.

Bonne nuit !

Meuble de rangement en pin cinquième étape…

Je suis un peu en retard sur ce projet, mais à tout lancer en même temps…

j’ai acheté trois spots halogènes (je voulais mettre des leds, mais je n’ai pas été emballé par ce que j’ai trouvé, notament un kit pour eclairer les terrasses exterieures chez Brico-dépot). J’ai trouvé le système de Brico-dépôt par mal, ils vendent des kits modulaires et chacun peut constituer son éclairage en assemblant les différents éléments :

  • Les transformateurs (magnétiques ou éléctroniques) de différentes puissances (pour 3 spots de 20W il faut 60W…)
  • Le cablage pour alimenter les différents spots + les lampes
  • Les boitiers de différentes matières, différentes couleurs, orientables… (j’ai choisi de superbes socles en alu (coulé) brossé puis vernis pas chers du tout)

Ensuite, il faut faire les trous :


Petite visseuse Bosch pas mal du tout, mais un peu nerveuse ! (je veux bien tester le modèle d’après…)


Sachez qu’à ce moment là, l’équipe de tournage qui normalement couvre les évènements était partie prendre un café (les cons !). Donc seul pour filmer et percer !


Socle alu brossé orientable dans deux dimensions


Pas de panique, la version définitive sera plus ordonnée…
Non non, je n’ai pas pris ce transfo pour sa forme de souris…

Le meuble a bien avancé, la suite va arriver !