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.
varmyPool{
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(typeofresult==='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));
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.
[^] # Re: Opinion personnelle
Posté par Bruno Michel (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.
Il manque le
=? Ou ça aurait dû être une définition de fonction ?J'imagine que ça aurait dû être
mySocket.on(['RST', 'DESTROY', 'CLOSE'], function() {.Les Promise ont été normalisées, mais
allSettledettimeoutne font pas partis de cette API. Je suppose que ça doit venir d'une implémentation tierce à la bluebird.La fonction
raiseRetryEventn'est pas définie ici, mais elle n'aura pas accès àcurSocket, ce qui paraît bizarre. J'aurais plutôt attenducurSocket.Clients.map(curSocket.raiseRetryEvent.bind(curSocket)), histoire d'avoir d'utiliser une méthode rattachée àcurSocket.Ç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).
Sans l'implémentation de
myPool.allocateConnection, c'est difficile à dire, mais je pense que ça devrait probablement êtreresult(myPool.allocateConnection.bind(myPool));L'appel à
curSocket.cleanupdevrait 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.