ugrás a tartalomhoz

Flow-based programming for JavaScript

inf · 2014. Aug. 20. (Sze), 12.26
Adatfolyam alapú programozást segítő JavaScript keretrendszer
 
1

Baromi nehéz volt megtalálni

inf · 2014. Aug. 19. (K), 06.08
Baromi nehéz volt megtalálni egyáltalán a fogalmat, hogy flow-based programming. Aszinkron kódnál egyedül ez oldja meg a pyramid of doom problémát, a többi csak gyenge próbálkozás ehhez képest... Kb egy hónapja én is agyalok egy ilyen rendszer készítésén, csak 3 év késésben vagyok a noflo-hoz képest, az még belefér... Jó látni, hogy másnak is vannak hasonló ötletei... :D
2

JavaScript

Poetro · 2014. Aug. 20. (Sze), 12.45
Ha JavaScript, akkor a kód miért nem JavaScriptben van? Ennyi erővel lehetett volna TypeScript, vagy ClojureScript is, kb ugyanannyi köze van a JavaScript-hez.
A másik dolog, hogy ezeknek a JSON fájloknak a megkonstruálása semmivel sem barátságosabb, mint Ant scripteket írni. Mert kb. ugyanarról van szó, csak éppen ez CoffeeScript nem általánosan használható, mint az Ant.
A "pyramid of doom" problémát pedig nem tudom, hogy ez miért oldaná meg. Azt szépen meg lehet oldani JavaScript-ben is.
3

Ha JavaScript, akkor a kód

inf · 2014. Aug. 20. (Sze), 13.16
Ha JavaScript, akkor a kód miért nem JavaScriptben van? Ennyi erővel lehetett volna TypeScript, vagy ClojureScript is, kb ugyanannyi köze van a JavaScript-hez.


Ez imho egyéni szociális probléma, oldd meg magadban. (Egyébként én sem szeretem a coffeescriptet, ill. typescriptet, de legalább olvasni megtanultam őket.)

A "pyramid of doom" problémát pedig nem tudom, hogy ez miért oldaná meg. Azt szépen meg lehet oldani JavaScript-ben is.

Persze, senki nem mondta, hogy kötelező a coffeescript, a probléma megközelítéséről volt szó. Az eddigiek, mint async vagy Q nem elég jók.
4

Azt szépen meg lehet oldani

Hidvégi Gábor · 2014. Aug. 20. (Sze), 13.32
Azt szépen meg lehet oldani JavaScript-ben is.
Hogyan?
5

Válassz!

MadBence · 2014. Aug. 20. (Sze), 13.46
co, de kismillió más lehetőség is van (promise, bluebird, vagy csak simán nem ágyazod egymásba a callbackeket). A cikkemben leírtam szinte minden lehetőséget.
  1. // sequential  
  2. co(function *(){  
  3.   var a = yield get('http://google.com');  
  4.   var b = yield get('http://yahoo.com');  
  5.   var c = yield get('http://bing.com');  
  6. })();  
  7.   
  8. // parallel  
  9. co(function *(){  
  10.   var a = get('http://google.com');  
  11.   var b = get('http://yahoo.com');  
  12.   var c = get('http://bing.com');  
  13.   var res = yield [a, b, c];  
  14. })();  
6

Köszönöm, megnézem. Az

Hidvégi Gábor · 2014. Aug. 20. (Sze), 13.56
Köszönöm, megnézem.

Az utóbbi öt évben, amióta kijött a node.js, erre az alapproblémára már ezerféle megoldást láttam. Mi a node.js/joyent által ajánlott hivatalos mód? Azaz, ha jön egy kezdő, aki ma ismerkedik meg a rendszerrel, honnan értesülhet róla, hogy honnan és mit kell választani a témában? A különböző megoldások kompatibilisek egymással? Előfordulhat az, hogy több node csomagot használok, amiben az egyik így, a másik úgy oldotta meg a problémát.
7

NodeJs

Poetro · 2014. Aug. 20. (Sze), 14.46
A lényeg, hogy nem helyben fejted ki a függvényedet (függvénykifejezés), hanem valahol deklarálod a függvényedet, és azt adod át. Így nem ágyazol egymásba függvényeket, csak egymás után hívod meg őket. OOP esetén még szükség lehet a metódusokat hozzákötni az objektumodhoz (bind) és akkor ezt adni át.
  1. function readHandler(err, bytesRead, buffer) {  
  2. }  
  3.   
  4. function openHandler(err, fd) {  
  5.   if (!err) {  
  6.     fs.read(fd, new Buffer(100), 0, 100, null, readHandler);  
  7.   }  
  8. }  
  9. fs.open(path, 'r', openHandler);  
Előfordulhat az, hogy több node csomagot használok, amiben az egyik így, a másik úgy oldotta meg a problémát.

Ez miért lényeges számodra, hogy az hogyan oldotta meg? Neked csak az interface a fontos. Remélhetőleg használja a Nodejs-ben bevett callback(err, results...) formulát, vagy EventEmitter, vagy pedig Promise alapú (esetleg mindegyiket támogatja).
8

Ok, valami nagyobb mágiára

Hidvégi Gábor · 2014. Aug. 20. (Sze), 15.44
Ok, valami nagyobb mágiára számítottam. Én mindig is így programoztam, mert az anoním függvények létjogosultságát sosem értettem (ha máshol is fel lehet használni, akkor úgyis ki kell emelni, ráadásul a szerkesztőben könnyebb rákeresni, ha van neve).

Ez mondjuk kicsit az elektromos áramra mint "tiszta energiára" emlékeztet, ahol helyben nem szennyezek és terhelem a környezetet, hanem exportálom máshova. A kód így nem piramisba szerveződik, hanem szétszóródik, de végeredményben az olvashatósága nem sokat javul.