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.

// sequential
co(function *(){
  var a = yield get('http://google.com');
  var b = yield get('http://yahoo.com');
  var c = yield get('http://bing.com');
})();

// parallel
co(function *(){
  var a = get('http://google.com');
  var b = get('http://yahoo.com');
  var c = get('http://bing.com');
  var res = yield [a, b, c];
})();
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.

function readHandler(err, bytesRead, buffer) {
}

function openHandler(err, fd) {
  if (!err) {
    fs.read(fd, new Buffer(100), 0, 100, null, readHandler);
  }
}
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.