4950

dur à dire sans le code

ta fonction est asynchrone ? peut être logue tu avant qu'elle ai terminé son job

edit, attention aussi à la porté des variables, let reste local
et la le mec il le pécho par le bras et il lui dit '

4951

Il faut sortir le debuggueur et faire du pas-à-pas. Au moins, les outils fournis avec les navigateurs sont maintenant bien élaborés, très loin de ce qui existait il y a 10 ans.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4952

J'aurais dit la même chose que robinHood.

Au moins ce langage n'a pas la merde de python ou t'as deux types de propriétés sur les objets (me rappelle plus de la syntaxe mais c'est facile de se planter, je crois qu'une ça fait partie du dictionnaire de l'objet et est surchargée par l'opérateur [] et l'autre c'est une propriété standard).
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

4953

Ça ne me dit rien pour Python hum
(les crochets servent pour les tableaux et plus généralement les objets qui ont une méthode __getitem__)
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4954

robinHood (./4950) :
ta fonction est asynchrone ? peut être logue tu avant qu'elle ai terminé son job
Bingo ! await ne fonctionne pas comme je l'imaginais, et les messages n'étaient pas dans l'ordre dans la console... Merci top

(et me devoir me taper de l'asynchrone alors que j'en ai pas besoin, juste parce que j'utilise fetch, ça commence à me gonfler. Je vais essayer avec un Web Worker, plutôt.)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4955

L'asynchrone est très propre en javascript, il n'y a pas de raison de l'éviter. Peut-être juste t'habituer, au concept de Promise. C'est vraiment un des trucs vraiment cool (j'ai même envie de dire génial) du langage.

(Va faire des coroutines en python... C'est tellement overengineeré en comparaison, tu peux faire un serveur web en 5 lignes c'est cool, mais tu passes des jours à pouvoir envoyer/recevoir des messages de façon asynchrone).

flanker (./4953) :
Ça ne me dit rien pour Python hum
(les crochets servent pour les tableaux et plus généralement les objets qui ont une méthode __getitem__)
Mais si, t'as les propriétés (__attr__ ?) et ce qui fait partie du dictionnaire. Certains aiment sans doute qu'il n'y ait pas de mélange (pas besoin de faire l'équivalent de hasOwnProperty en JS).
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

4956

pour qu'await fonctionne ta fonction doit retourner une promise

async fn(){ return fetch("/truc") .then( ()=>{ } ) ; }
ou elle même faire ses await (
How to Use Fetch with async/awaitDmitri Pavlutin BlogHow to use fetch() with async/await syntax in JavaScript: fetch JSON data, handle errors, make parallel requests, cancel requests.


oui le full async est vraiment top, mais le js cumule pas mal de manières de faire cb/lib async/bluebird/promisifyAll/native promise/async await .. bon c'est intercompatible certes ^^

la ce qui me rend fou c'est la non compatibilité import / require il y a vraiment eu une scission, quant on reprend un vieux projet et que les dépendances ont switché à la nouvelle manière de faire ... aie c'est pas ouf ^^
et la le mec il le pécho par le bras et il lui dit '

4957

Merci, mais en fin de compte j'ai utilisé XMLHttpRequest en mode synchrone dans un Web Worker, et ça marche smile

(dans mon cas, je voulais que des requêtes soient exécutées successivement, pas en parallèle. Bien sûr on peut le faire aussi avec fetch et des promises chaînées, mais ça n'apporte rien, à part de la complexité en plus)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4958

"un navigateur est mono thread" voila pourquoi les javascripeur ne jurent que par l'asynchrone alors que... en fait.. ca n'apporte rien d'autre qu'une complicité accrue pour aucune bonne raison d'autre que les dev de navigateur sont historiquement fainéants.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4959

Ben au moins ça a apporté un bon modèle pour ce qui est coroutines et asynchronicité. Et ca a limité la course à la puissance aussi...

Exécuter des trucs de façon synchrone c'est juste:
await Promise.all([
    fetch(...),
    fetch(...),
    ...
])

Pas vraiment de complexité.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

4960

Sauf qu'avec cette méthode :

- toutes les requêtes sont lancées en parallèle quand même, or c'est justement ce que je veux éviter (toutes mes requêtes sont sur la même API, dont les conditions d'utilisation demandent explicitement de ne pas lancer plusieurs requêtes en même temps)

- si l'une des requêtes échoue, Promise.all() échoue immédiatement, ce n'est pas ce que je veux non plus

- j'ai déjà un tableau qui contient les données qui serviront à générer les requêtes, et ça me forcerait à évaluer tout le tableau d'avance pour le convertir en tableau de promises, ce qui n'apporte rien

En comparaison, avec des requêtes synchrones, j'ai juste à faire un bête forEach sur mon tableau et c'est plié. Non seulement ça fait ce que je veux, mais c'est aussi plus simple à écrire et à déboguer. Et comme ça tourne dans un Web Worker, c'est un thread distinct donc ça ne bloque pas l'UI (et rien ne m'empêche non plus d'avoir un timeout pour forcer l'arrêt du worker s'il prend trop de temps).

Je veux bien qu'il y ait des cas où l'asynchrone soit utile (encore que, comme le dit Godzil, la façon dont JS l'implémente découle surtout du fait que c'était initialement mono-thread), mais là c'est pas le cas.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4961

En fait les deux conviennent, pas de souci avec un worker, mais en asynchrone c'est pas plus compliqué. Mais c'est vrai que tu peux pas retourner une promise du callback de .forEach, donc ça fait une exception. Les APIs modernes voient que tu retournes une promesse et attendent dessus (c'est rendu facile avec TypeScript aussi, il te forcera à gérer le cas où empêchera l'utilisateur passer une fonction asynchrone, donc ça gueulera assez vite si le cas a du sens). Dans ce cas le forEach fonctionnerait de façon transparente. Quoi qu'il en soit il y a un for (const item in obj) ou item of obj, qui fait que tu n'as pas besoin de la fonction forEach. Perso je m'en sers presque jamais, ça vient du temps où ils voulaient tout faire avec des callbacks, donc ils l'ont mis pour des raisons d'orthogonalité, mais depuis ce n'est plus aussi trivial justement. .map est beaucoup plus utile et je pense que ça devrait remplacer ~100% des forEach.

How to Use forEach in an Async/Await FunctionMastering JSYou should not use async functions with `forEach()` in JavaScript. Here's why, and what you should use instead.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

4962

Godzil (./4958) :
"un navigateur est mono thread" voila pourquoi les javascripeur ne jurent que par l'asynchrone alors que... en fait.. ca n'apporte rien d'autre qu'une complicité accrue pour aucune bonne raison d'autre que les dev de navigateur sont historiquement fainéants.
Coté serveur, dans certains cas ou il faut pouvoir gérer beaucoup de requêtes en parallèle, ça peut apporter un gain en performance réel car la création d'un thread et de la stack associée a un coût.
Coté navigateur l’intérêt technique est certes plus limité mais, en utilisant bien async/await, on a un code plutôt clair et qui fonctionne, ce qui est en général la première priorité.
avatar

4963

Javascript -> serveur.

Desole mais meme 10 apres, ca passe toujours pas.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4964

Zerosquare > http://caolan.github.io/async/v3/ est une lib vraiment puissante pour contrôler ton flow de code async

Godzil tu ne t'es toujours pas fait à l'idée mais dans les faits c'est ultra badass et très très rapide

après il faut être assez rigoureux sans ça c'est vite spaghetti
et la le mec il le pécho par le bras et il lui dit '

4965

robinHood (./4964) :
Godzil tu ne t'es toujours pas fait à l'idée mais dans les faits c'est ultra badass et très très rapide
après il faut être assez rigoureux sans ça c'est vite spaghetti
C'est tout le soucis du JavaScript : pour qu'il soit efficace, il ne faut pas l'utiliser comme il a été prévu. D'autres langages auraient bien mieux pu faire l'affaire.
avatar

4966

Ils auraient pu mais ils ne l'ont pas faite, l'affaire. Tout le truc du javascript c'est d'avoir rompu les codes justement, d'une façon totalement contraire aux autres langages avec leurs concepts savants. Donc c'est justement dans l'imperfection qu'il est intéressant. Sur la durée j'ai pas de doute que ce sera remplacé, mais en attendant ça marque des points de partager une partie de la base de code navigateur/serveur, même si c'est d'intérêt assez limité en pratique.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

4967

ha oui l'imperfection et non determinisme c'est parfait pour un language de programmation fonctionel. Oui
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4968

pour qu'il soit efficace, il ne faut pas l'utiliser comme il a été prévu.

j'ai parlé de rigueur, après si pour toi c'est d'origine pensé comme bordélique.. 😁

un language classique est bien plus lisible, de haut en bas, ici en full async sans aller ranger proprement les callbacks dans des objets et ou fichiers séparés c'est vite le bordel, mais ça reste clairement viable même dans des projets de plusieurs dizaines de milliers de lignes
et la le mec il le pécho par le bras et il lui dit '

4969

C'est ça. La recompilation rapide aussi est un grand atout, faut pas oublier. Pis aussi les outils, comme TypeScript, qui améliorent beaucoup l'écosystème (ça reste difficile à égaler la combinaison des deux). Bien sûr, c'est dans une quantité d'outils souvent douteux et overkill.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

4970

(à la base, je cherchais juste à faire un proof-of-concept le plus simplement possible, pas à lancer un débat sur le JS grin - quoi qu'il en soit, la démo client de ce matin a marché hehe)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4971

top
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4972

robinHood (./4968) :
j'ai parlé de rigueur, après si pour toi c'est d'origine pensé comme bordélique.. 😁
Disons que si on remonte à la base de la base coté serveur (Live Script), il n'a quasiment pas été pensé du tout, vu que c'est un bricolage fait en deux semaines.

Mais c'est plus logique de remonter son origine coté client, ou il était prévu que le plus gros du code coté client soit dans des applets Java qui ont une structure assez stricte. JavaScript devait être avant tout un outil de scripting pour gérer les interactions entre les applets Java et le navigateur, d’où le nom JavaScript. Dans cette optique le bordel était en effet plus un avantage qu'un défaut, le plus important était la simplicité pour mettre en œuvre de micro-scripts, une tache qu'il remplissait très bien.

Maintenant qu'il sert comme langage a part entière, les incohérences avec les objectifs initiaux se font vraiment sentir. Ce n'est pas pour rien que TypeScript et les dernières version de la norme ECMA essaient de rentrer au chausse-pied des concepts pour rendre le langage plus strict, cependant l'historique du langage rend les choses compliquées.
avatar

4973

Heu, non le javascript n'a jamais ét fait pour faire le "lien" entre java et un navigateur.

During these formative years of the Web, web pages could only be static, lacking the capability for dynamic behavior after the page was loaded in the browser. There was a desire in the flourishing web development scene to remove this limitation, so in 1995, Netscape decided to add a scripting language to Navigator. They pursued two routes to achieve this: collaborating with Sun Microsystems to embed the Java programming language, while also hiring Brendan Eich to embed the Scheme language.[6]

Netscape management soon decided that the best option was for Eich to devise a new language, with syntax similar to Java and less like Scheme or other extant scripting languages.[5][6] Although the new language and its interpreter implementation were called LiveScript when first shipped as part of a Navigator beta in September 1995, the name was changed to JavaScript for the official release in December.[6][1][15]

The choice of the JavaScript name has caused confusion, implying that it is directly related to Java. At the time, the dot-com boom had begun and Java was the hot new language, so Eich considered the JavaScript name a marketing ploy by Netscape.[16]
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4974

je ne sais pas tellement d’où tu sors que le langage était initialement à destination serveur ni même qu'il devait faire le pont entre du code java & le navigateur

mais que le langage actuellement le plus utilisé au monde ai été conçu en 10j est un troll ultime à tous ses détracteurs <3

je ne savais pas que le gars avait ensuite fondé mozilla !

https://web.archive.org/web/20160305202500if_/https://www.computer.org/csdl/mags/co/2012/02/mco2012020007.pdf
JavaScript - Wikipediaen.wikipedia.org

A Brief History of JavaScriptDEV CommunityJavaScript is a programming language that represents one of the three core languages used to develop...

Brendan Eich - Wikipediaen.wikipedia.org

https://www.ecma-international.org/wp-content/uploads/ECMA-262_1st_edition_june_1997.pdf
https://books.google.fr/books?id=3b40AwAAQBAJ&pg=PT32&redir_esc=y#v=onepage&q&f=false
et la le mec il le pécho par le bras et il lui dit '

4975

Godzil (./4973) :
Heu, non le javascript n'a jamais ét fait pour faire le "lien" entre java et un navigateur.
Le communiqué de l'époque.
https://web.archive.org/web/20020606002913/http://wp.netscape.com/newsref/pr/newsrelease67.html
Donc il n'a pas été présenté "que" comme une moyen de faire le lien avec Java, mais c'est clairement un objectif annoncé. Au début Netscape présentait clairement Java comme la techno pour les applications avancées coté client et JavaScript comme l'outil de scripting complémentaire. La mort des applets Java puis de Flash à donné à JavaScript une place qui ne lui était absolument pas destinée, pour le meilleur au niveau de la standardisation, mais pas pour la pertinence du langage même.

robinHood (./4974) :
je ne sais pas tellement d’où tu sors que le langage était initialement à destination serveur
Le fait que le précurseur de JavaScript était originellement prévu à destination des serveurs n'est pas une info vraiment cachée. Elle est mentionné dans la plupart des résumé historiques, tu peux notamment le trouver sur la page Wikipédia
avatar

4976

alors que la vraie solution c'était des activex et du vbscript...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

4977

C'est marrant de lire ces communiqués avec le recul smile on a l'impression de vraiment faire partie de l'histoire. C'est clair que c'était plus flou leur but à l'époque, c'est impressionnant que ça ait donné ce que ça a donné smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

4978

étrange, seul ce communiqué de presse en parle comme "ça va faire tout et partout", même une interview d'eich en 98 ne parle que de scripts pour le navigateur

il n'y à que la page wiki fr qui parle d'un langage initialement coté serveur :
"Brendan Eich a initialement développé un langage de script côté serveur, appelé LiveScript, pour renforcer l'offre commerciale de serveur HTTP. Netscape travaille alors au développement d'une version orientée client de LiveScript."

qui semble bullshit total, notamment dans l'interview :
"LiveScript was the official name it was given when it first shipped in beta releases of Netscape Navigator 2.0 in September 1995, but we rechristened it JavaScript in a joint announcement with Sun on December 4, 1995."

La mort des applets Java puis de Flash à donné à JavaScript une place qui ne lui était absolument pas destinée
ActionScript était du js, enfin un langage ecmascript ^^

bon, à l'époque eich aurait du le rendre un poil moins permissif ça aurait évité nombre de drama parmi les dev grin
et la le mec il le pécho par le bras et il lui dit '

4979

vince (./4976) :
alors que la vraie solution c'était des activex et du vbscript...
La vraie solution ça aurait été de partir directement sur WebAssembly, mais la standardisation du Web en mode on met tout le monde autour de la table et on réfléchit calmement aux conséquences de nos choix techniques était totalement inenvisageable à l'époque. La priorité de tous les acteurs était de pousser leurs solutions maison, à la fois pour aller plus vite, et pour s'imposer comme standard de fait qu'on pourrait rentabiliser par la suite.
Quand on voit que WebAssembly a été annoncé il y a 7 ans, à une implémentation minimale depuis 5 ans et toujours pas d'accès direct à des API essentielle du navigateurs telles que le DOM, on est plus dans les mêmes échelles de temps qu'a l'époque, ou l'on se permettait de sortir des solutions faites à la va vite en quelque mois, voire jours sans réfléchir aux conséquences.

robinHood (./4978) :
étrange, seul ce communiqué de presse en parle comme "ça va faire tout et partout", même une interview d'eich en 98 ne parle que de scripts pour le navigateur
En 98, les applets Java avaient déjà pas mal de plomb dans l'aile, Pas étonnant que Brendan Eich parle plutôt de JavaScript.

robinHood (./4978) :
il n'y à que la page wiki fr qui parle d'un langage initialement coté serveur :
Exact, pourtant je me souviens l'avoir vu à pas mal d'endroits, mais je n'arrive plus a la trouver l'info en dehors de cette page. De toute façon ça reste un détail historique vu que LiveScript n'est jamais officiellement sorti sous ce nom et n'a au final pas servi coté serveur à l'époque. Lors de sa publication officielle il était déjà passé coté client en tant que JavaScript.
avatar

4980

Pas étonnant que Brendan Eich parle plutôt de JavaScript.

visiblement il y eu un choix à faire et les deux en concurrence directe au début, soit java direct, soit un nouveau langage plus accessible
pour éviter que seuls les dev pro puissent produire des choses ils sont partis sur le langage scripté de Eich

après en vérité avoir un langage async évènementiel était vraiment l'idéal pour du web des clicks et autre hover
et la le mec il le pécho par le bras et il lui dit '