Comments on: Deferred, Future et Promise : le pourquoi, le comment, et quand est-ce qu’on mange http://sametmax.com/deferred-future-et-promise-le-pourquoi-le-comment-et-quand-est-ce-quon-mange/ Du code, du cul Sat, 07 Nov 2015 11:08:18 +0000 hourly 1 http://wordpress.org/?v=4.1 By: Duckie http://sametmax.com/deferred-future-et-promise-le-pourquoi-le-comment-et-quand-est-ce-quon-mange/#comment-48028 Tue, 10 Jun 2014 11:10:15 +0000 http://sametmax.com/?p=10418#comment-48028 @Pierre : Le blocage est coûteux indépendamment du langage puisque le temps perdu provient d’éléments non maîtrisable au sein du logiciel (par exemple, une bande passante faible). C’est juste que Go force à réfléchir “par flux” et donc à faire de l’asynchrone sans qu’on s’en rende trop compte.

@Sam: Pour la culture, C++11 voit l’introduction dans le standard C++ de std::future, std::promise, std::async, et toute la famille qui va bien. Ces concepts sont donc aussi présents en C++ en standard.

]]>
By: Sam http://sametmax.com/deferred-future-et-promise-le-pourquoi-le-comment-et-quand-est-ce-quon-mange/#comment-43766 Fri, 06 Jun 2014 15:06:42 +0000 http://sametmax.com/?p=10418#comment-43766 Non, j’utilise then est une méthode qui me sert ici de décorateur, pas de @classmethod.

Pour plus de détail sur la POO :

http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-1/

Mais c’est un exemple très avancé ici, donc ne t’inquiète pas si @promise.then ne te parle pas.

]]>
By: furankun http://sametmax.com/deferred-future-et-promise-le-pourquoi-le-comment-et-quand-est-ce-quon-mange/#comment-43753 Fri, 06 Jun 2014 14:46:15 +0000 http://sametmax.com/?p=10418#comment-43753 De mon côté j’ai une question de noob qui n’a rien à voir: dans l’exempel python à ne pas reproduire tu utilises “@promise.then” pour ajouter une étape à ta chaîne de callback; je croyais qu’il fallait déclarer “then” en @classfunction pour pouvoir faire ça? oui je code en 2.7 et je ne comprends toujours rien aux @classfunction et @staticfuntion.

]]>
By: kontre http://sametmax.com/deferred-future-et-promise-le-pourquoi-le-comment-et-quand-est-ce-quon-mange/#comment-43507 Fri, 06 Jun 2014 07:41:36 +0000 http://sametmax.com/?p=10418#comment-43507 Ça y est, je vois l’intérêt du truc. Merci Sam !

]]>
By: fab http://sametmax.com/deferred-future-et-promise-le-pourquoi-le-comment-et-quand-est-ce-quon-mange/#comment-42429 Thu, 05 Jun 2014 08:02:37 +0000 http://sametmax.com/?p=10418#comment-42429 @Sam : … ta chatte, ta chatte !

]]>
By: fab http://sametmax.com/deferred-future-et-promise-le-pourquoi-le-comment-et-quand-est-ce-quon-mange/#comment-42420 Thu, 05 Jun 2014 07:52:57 +0000 http://sametmax.com/?p=10418#comment-42420 @Sam : en effet je me rend compte qu’une petite explication s’impose. La fonction auto permet de définir une suite de fonctions asynchrones à lancer sans se soucier de qui doit attendre quoi juste en définissant des dépendances entre elles.

C’est assez bien expliqué ici : http://jakub.fedyczak.net/post/async-auto-best-feature-of-node-async/ avec un graphique qui permet de visualiser dans quel ordre vont s’exécuter les fonctions.

Notamment on voit les chemins d’exécution en parallèle, dans l’exemple du lien il y en a trois qui se lancent dès que les dépendances sont exécutées, et qui se rejoignent à la fin pour obtenir le résultat voulu.

]]>
By: Sam http://sametmax.com/deferred-future-et-promise-le-pourquoi-le-comment-et-quand-est-ce-quon-mange/#comment-42395 Thu, 05 Jun 2014 06:54:07 +0000 http://sametmax.com/?p=10418#comment-42395 @fab : je très clair, fab.

]]>
By: Kyoku57 http://sametmax.com/deferred-future-et-promise-le-pourquoi-le-comment-et-quand-est-ce-quon-mange/#comment-42393 Thu, 05 Jun 2014 06:52:02 +0000 http://sametmax.com/?p=10418#comment-42393 Sympa l’article. J’ai tout compris :-) L’asynchrone est un monde bien particulier.

PS : En parlant des tampons … en aurais-tu un à la sphaigne ou en en cheveux de cherokee ?

]]>
By: Sam http://sametmax.com/deferred-future-et-promise-le-pourquoi-le-comment-et-quand-est-ce-quon-mange/#comment-42379 Thu, 05 Jun 2014 05:42:28 +0000 http://sametmax.com/?p=10418#comment-42379 @Naouak: tu es complètement passé à côté du fait que :

– je ne dis pas que les promis vient de jquery, mais qu’on les retrouve dedans et aussi ailleurs. Je ne parle pas d’origine.
– l’article est clairement pédagogique, le but n’est pas de faire au mieux mais de faire passer une notion. Les exemples sont volontairement imparfaits pour faire passer la notion.
– pour l’implémentation Python, je dis en toute lettre à la fin que ça n’adresse pas ce problème.

Bref, un tampon pour toi.

Je subodore que tu es très jeune, puisque tu ne reconnais pas le trombonne. Ce qui explique sans doute le côté emporté.

]]>
By: Naouak http://sametmax.com/deferred-future-et-promise-le-pourquoi-le-comment-et-quand-est-ce-quon-mange/#comment-42014 Wed, 04 Jun 2014 18:36:51 +0000 http://sametmax.com/?p=10418#comment-42014 Je veux pas être méchant mais :
Les promises ne sont pas un truc de jQuery.

Le premier code est infect non pas parce qu’il utilise des callback mais parce qu’il est juste mal pensé. Le callback-hell est assez souvent un problème de la part du développeur pas du principe. D’ailleurs le javascript à des mécanismes simple pour l’évite.

En fait, juste en séparant simplement le code du premier en actions atomiques, on arrive ça :

$(function(){
  function fetchSession(){
    $.get('/sessions/last', manageSession);  
  }
 
  function startAppAndInitUI(){
    startApp(initUi);
  }
 
  function manageSession(session){
    if (session.device != currentDevice){
      fetchAndLoadContext(session.id);
    else {
      startAppAndInitUI();
    }
  }
 
  function fetchAndLoadContext(sid) {
    $.get('/session/ ' + sid + '/context', function(context){loadContext(startAppAndInitUI)});
  }
 
  $.post('/auth/token', function(token){
    saveToken(token);
    fetchSession();  
  })
});

Je suis sûr qu’avec le vrai contexte de l’application on peut faire un meilleur truc que ça d’ailleurs.

Le second exemple, est pas bon, les deux callbacks sont lancés en même temps et non l’un après l’autre. Il aurait fallut récupérer la nouvelle promise pour faire le second then.

Le “plus beau code” utilise pas vraiment bien les promises.
Voila une meilleure utilisation :

$(function(){
  // create new token
  $.post('/auth/token') 
  // then save token and get last session
  .then(function(token){
    saveToken(token);
    return $.get('/sessions/last');
  }) 
  // then init session
  .then(function(session){
    if (session.device != currentDevice){
      return $.get('/session/ ' + session.id + '/context').then(loadContext);
    }
  })
  .then(function(){
    startApp(initUi);
  });
});

Quelle différence ? Les appels de then à partir du deuxième.
Globalement, on finit par faire tout le temps la même chose. Pourquoi écrire deux fois l’appel quand on peut juste le chaîner ?

Et pour finir, il me semble (je suis pas spécialiste en Python) que ta classe promise ne fait pas son boulot.
L’un des avantages (occulté de cet article) des promises est qu’il permet aussi de stocker le résultat d’une opération asynchrone. Et donc si on ajoute un callback après que l’opération asynchrone soit finie, le callback est quand même lancé. Ça permet de mutualiser une opération asynchrone récurrente (comme par exemple à tout hasard une authentification).

Au final, l’article montre pas vraiment les meilleurs points des promises ce qui est juste dommage. (le parrallélisme, le race, la gestion d’erreur, la réutilisation… d’ailleurs l’article de HTML5rocks montre des usages plus intéressants (Article sur les promises))

PS: ce trombone est chiant.

]]>