• [^] # Re: Opinion personnelle

    Posté par (site web personnel) . En réponse au journal Et si JavaScript allait droit dans le mur ?. Évalué à 10. Dernière modification le 04 mars 2016 à 11:02.

    Pour le coup, je ne suis vraiment pas convaincu par un tel exemple. 11 lignes, ce n'est pas beaucoup, mais ici, ça a l'air truffé d'erreurs.

    var myPool {

    Il manque le = ? Ou ça aurait dû être une définition de fonction ?

    mySocket.on('RST','DESTROY','CLOSE') {

    J'imagine que ça aurait dû être mySocket.on(['RST', 'DESTROY', 'CLOSE'], function() {.

    Promise.allSettled
     .timeout

    Les Promise ont été normalisées, mais allSettled et timeout ne font pas partis de cette API. Je suppose que ça doit venir d'une implémentation tierce à la bluebird.

    curSocket.Clients.map(raiseRetryEvent)

    La fonction raiseRetryEvent n'est pas définie ici, mais elle n'aura pas accès à curSocket, ce qui paraît bizarre. J'aurais plutôt attendu curSocket.Clients.map(curSocket.raiseRetryEvent.bind(curSocket)), histoire d'avoir d'utiliser une méthode rattachée à curSocket.

    if(typeof result === 'function')

    Ça peut suffire ici, mais il faut faire attention. Il y a beaucoup de choses qui peuvent passer au travers (les classes ES6 sont vues comme des fonctions IIRC, lodash traite aussi de certains cas particuliers : https://github.com/lodash/lodash/blob/4.6.1/lodash.js#L10020).

    result(myPool.allocateConnection);

    Sans l'implémentation de myPool.allocateConnection, c'est difficile à dire, mais je pense que ça devrait probablement être result(myPool.allocateConnection.bind(myPool));

    results.forEach(function (result, index) {
     // ...
     curSocket.cleanup();
    });

    L'appel à curSocket.cleanup devrait sûrement être en dehors de la boucle.

    Bref, c'est un bel exemple que le JavaScript est un langage avec beaucoup de pièges. Et je pense que les 5 langages que j'ai cités dans mon journal s'en serait tous tirés bien mieux que ça sur cet exemple.