SZERVER OLDALI JAVASCRIPT. 7. hét Promise, async, error rst callback, grunt

Hasonló dokumentumok
SZERVER OLDALI JAVASCRIPT. 12. hét Unit és integrációs tesztek, mocha, assert struktúrák, TDD / DBB

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

WEBES ALKALMAZÁSFEJLESZTÉS 1.

Informatika terméktervezőknek

Pénzügyi algoritmusok

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Imperatív programozás

Task-alapú párhuzamosítás C# környezetben

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Imperatív programozás

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

JavaScript bűvésztrükkök, avagy PDF olvasó és böngésző hackelés

Java programozási nyelv 9. rész Kivételkezelés

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Széchenyi István Egyetem

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Concurrency in Swing

Powershell 2. gyakorlat

Objektumorientált programozás C# nyelven

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

ASP.NET 2.0 (Whidbey)

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Java és web programozás

Körkörös listák. fej. utolsó. utolsó. fej

Objektumorientált programozás C# nyelven III.

Verziókezelt konfigurációmanagement++ Pásztor György, SZTE Klebelsberg Könyvtár

Stateless Session Bean

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

2016, Funkcionális programozás

Bevezetés a Python programozási nyelvbe

1. A feladatról. 2. Az áramkör leírása. Mechatronika, Optika és Gépészeti Informatika Tanszék D528. Léptetőmotor vezérlése

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

S z á m í t ó g é p e s a l a p i s m e r e t e k

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Osztályszintű elérés, kivételkezelés, fájlkezelés

Programozási nyelvek II.: JAVA

Programozási technológia

Matlab alapok. Baran Ágnes. Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15

Szkriptnyelvek. 1. UNIX shell

JavaScript tesztelési módszerek BRAUN PATRIK: JAVASCRIPT TESZTELÉSI MÓDSZEREK 1

Kivételek, kivételkezelés a C++ nyelvben

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

eseményvezérelt megoldások Vizuális programozás 5. előadás

A legalacsonyabb szintű tesztelés. A programot felépítő egységek tesztelése Unit: egy rendszer legkisebb önálló egységként tesztlehető része.

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

I. 288.: Utcai WiFi térkép

Tartalom Tervezési egység felépítése Utasítások csoportosítása Értékadás... 38

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Using the CW-Net in a user defined IP network

2018, Funkcionális programozás

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

XCZ állományok ellenőrzése, átadása elektronikus beküldésre és közvetlen beküldése parancssori funkcióval az ÁNYK programban

Objektumorientált programozás C# nyelven

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

Bevezetés Működési elv AJAX keretrendszerek AJAX

Kutatási fázis eredményei. Turi Péter

T Á J É K O Z T A T Ó. A 1108INT számú nyomtatvány a webcímen a Letöltések Nyomtatványkitöltő programok fülön érhető el.

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

BASH script programozás II. Vezérlési szerkezetek

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Magas szintű programozási nyelvek 2 Előadás jegyzet

Python tanfolyam Python bevezető I. rész

Tranzakciókezelés PL/SQL-ben

KIEGÉSZÍTŽ FELADATOK. Készlet Bud. Kap. Pápa Sopr. Veszp. Kecsk Pécs Szomb Igény

Biztonság java web alkalmazásokban

Programozás burritokkal

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Pénzügyi algoritmusok

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Magyar változat. A termék bemutatása. A hardver telepítése. PU013 Sweex 1 portos párhuzamos és 2 portos soros PCI kártya

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Programozás II. 2. Dr. Iványi Péter

Internet technológiák

Delegátumok C#-ban Krizsán Zoltán iit

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Szoftvertelepítési útmutató NPD HU

Csatlakozás a BME eduroam hálózatához Setting up the BUTE eduroam network

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

BME MOGI Gépészeti informatika 4.

Globális operátor overloading

Szoftvergyártás: gyártásvezérlés kód-figyeléssel

Komputeralgebra Rendszerek

Internet programozása. 3. előadás

Java IX. telkezelés a Java-ban

Szkriptelési feladat megoldása

Szövegek C++ -ban, a string osztály

OE-NIK 2010/11 ősz OE-NIK ősz

OOP és UML Áttekintés

RIA Rich Internet Application

Java IX. telkezelés a Java-ban

Kivételkezelés a C++ nyelvben Bevezetés

Internetkonfigurációs követelmények. A számítógép konfigurálása. Beállítások Windows XP alatt

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

PHP gyorstalpaló, avagy a Hello World-től az űrlapellenőrzésig

Átírás:

SZERVER OLDALI JAVASCRIPT 7. hét Promise, async, error rst callback, grunt

ELŐADÁS TÉMÁJA Pár izgalmasabb javascript / node speci kus dolog. A nyelvi elemek előadásra épít erősen...

FUNCTIONÖK / CALLBACKEK module.exports = function (objectrepository) { return function (req, res, next) { usermodel.findone({}, function (err,results){ res.tpl.users = results; return next(); return next(); }; }; A function nagyon gyakran használt nyelvi elem.

EGYSZERŰ PÉLDA - FÁJL BEOLVASÁS fs.readfile('config.json', function (error, text) { if (error) { console.error('error while reading config file'); } else { try { var obj = JSON.parse(text); console.log(json.stringify(obj, null, 4)); } catch (e) { console.error('invalid JSON in file'); } } "Sima" aszinkron és szinkron funkciók egymás után.

EGYSZERŰ PÉLDA - FÁJL BEOLVASÁS Használjunk promiset! readfilepromisified('config.json').then(json.parse).then(function (obj) { console.log(json.stringify(obj, null, 4)); }).catch(function (reason) { console.error('an error occurred', reason);

PROMISE Egy oszályba burkolt függvény, ami az állapotváltását láncolható módon tájékoztatja a rá feliratkozókat. ES6-ban natív nyelvi elem!! var promise = new Promise( function (resolve, reject) {... if (...) { resolve(value); } else { reject(reason); } promise.then( function(a){console.log('resolve:' + a);}, function(b){console.log('reject:' + b);}).catch(function(e){console.error(e);

PROMISE Siker esetén resolve, hiba esetén reject. Ha egyiket sem hívod, akkor végtelenségig vár! és dobott kivételeket is lehet kezelni (ha nincs reject ág then-ben, akkor a catchig jut el a hibakezelés)

PROMISE Láncolhatóak ha egy függvény promiset ad vissza, vagy ha szinkron. Ha bármelyik rejectet hív, megtörik a lánc. function promisefv(item){ return new Promise(function (resolve, reject) { resolve(item+'p'); }

PROMISE LÁNC function promisefv(item) { return new Promise(function (resolve, reject) { resolve(item + 'p'); } function normalfv(item) { return item + 'n'; } promisefv('1').then(normalfv).then(promisefv).then(function (item) {return item + '2';}).then(console.log).catch(function (e) { console.log('error:' + e); Ezt írja ki: 1pnp2

PROMISE LÁNC Ha a láncban bárhol hiba dobódik, akkor az az első catch-ig fog elérni. Elég egy catch, kevesebb hibakezelési ág, ez jó!

PROMISE.ALL Több promise egy várakozásban összefogva - vagy megvárja mindegyik sikerét, vagy az első kudarcot. var p1 = Promise.resolve(3); var p2 = 1337; var p3 = new Promise(function(resolve, reject) { settimeout(resolve, 100, "foo"); Promise.all([p1, p2, p3]).then(function(values) { console.log(values); // [3, 1337, "foo"]

PROMISE.RACE Több promise, amelyik gyorsabban befejeződik, az adódik át a thenben (a többi is fut / lefut, nem szakítódik meg). var p1 = new Promise(function(resolve, reject) { settimeout(resolve, 500, "one"); var p2 = new Promise(function(resolve, reject) { settimeout(resolve, 100, "two"); Promise.race([p1, p2]).then(function(value) { console.log(value); // "two" // Both resolve, but p2 is faster

PROMISE.RESOLVE, PROMISE.REJECT Szinkron function / érték becsomagolása promiseba, van ennek értelme. :) function foo(){ return Promise.resolve('alma'); } function bar(){ return Promise.reject('alma'); } foo.then(bar).catch(console.log);

PROMISE Bizonyos esetekben ez kell, bizonyos esetekben normál callbackek, illetve beszéljünk az async npm modulról. npm i async

ASYNC Async.js Listákon végrehajtott tömeges műveletek, control ow műveletek, általános async műveletek - szinte mindenre van valamilyen megérhető recept.

ASYNC - EACH, EACHSERIES, EACHLIMIT each(arr, iterator, [callback]) eachseries(arr, iterator, [callback]) eachlimit(arr, limit, iterator, [callback]) var lista = [1,2,3]; async.each(lista, function(item, callback) { console.log('processing:'+item); settimeout(function(){ console.log('processing done:'+item); callback(null); },Math.random()*1000); }, function (err){ console.log('all done'); Processing:1 Processing:2 Processing:3 Processing done:3 Processing done:1 Processing done:2 All done Eredmény:

ASYNC - MAP (MAPSERIES, MAPLIMIT) map(arr, iterator, [callback]) var lista = [1,2,3]; async.map(lista, function (item, callback) { callback(null, item * item); }, function (err, results) { console.log(results); [ 1, 4, 9 ] Eredmény:

async.series([ function(callback){ callback(null, 'one'); }, function(callback){ callback(null, 'two'); } ], function(err, results){ console.log(results); ['one', 'two'] ASYNC - SERIES series(tasks, [callback]) Eredmény:

async.parallel([ function(callback){ settimeout(function(){ callback(null, 'one'); }, 200); }, function(callback){ settimeout(function(){ callback(null, 'two'); }, 100); } ], function(err, results){ console.log(results); ['one', 'two'] ASYNC - PARALLEL parallel(tasks, [callback]) Eredmény:

ASYNC - WATERFALL waterfall(tasks, [callback]) async.waterfall([ function(callback) { callback(null, 'one', 'two'); }, function(arg1, arg2, callback) { //arg1: one, arg2: two callback(null, 'three'); }, function(arg1,callback) { //arg1: three callback(null, 'done','done2'); } ], function(err, result, result2){ console.log(result,result2); } done done2 Eredmény:

ASYNC És még sokan mások... Tessék dokumentációt olvasni hozzá: https://github.com/caolan/async Instrumentáláshoz az egyik legjobb library. MINDEN FELADATFÜGGŐ: async promise (promisify) callback sima függvények aszinkron fv

ERROR FIRST CALLBACK Sok helyen láttuk már a mintázatot: function callback(error,result){... } A legtöbb esetben a node ezt használja hibajelzésre async esetben.

ERROR FIRST CALLBACK Példa: fs.readfile('/etc/passwd', function (err, data) { if (err) throw err; console.log(data); Ez egy jó mintázat! Ha async akarunk hibát jelezni, tegyük így! A throw esetében kaotikusabb megmondani, hol köt ki a hibánk.

ERROR FIRST CALLBACK Könnyű mockolni/tesztelni is. Mindig nézzük meg, hogy az általunk használt modul / package / library / whatever mit használ. Sok a promise és az error rst callbackes megoldás is.

GULP The streaming build system

GULP Node-ban alapvetően nincs build folyamat, az emberek pedig szeretnek buildelni. :) Deploy előtti automatikus scriptekről beszélünk ilyenkor általában, de nagyon sok felhasználási mód van még.

GULP Telepítsük globálisan npm i gulp-cli -g npm i --save-dev gulp Illetve egy dev package is kell Egy speciális fájlt (gulp le.js) használ a folyamatok leírására. A folyamatok külön npm modulokban lehetnek. var gulp = require('gulp'); var csso = require('gulp-csso'); gulp.task('default', function () { return gulp.src('./main.css').pipe(csso()).pipe(gulp.dest('./out'));

GULP Lefuttatva megtörténik a varázslat: $ gulp [19:30:24] Using gulpfile gulpfile.js [19:30:24] Starting 'default'... [19:30:24] Finished 'default' after 45 ms Mindegyik modul más, máshogy kell kon gurálni, paraméterezni, stb. (Éppen ezért léteznek alternatívák, pl Grunt)

GULP-UGLIFY Összefűzi és minifyolja a csseket npm install --save-dev gulp-uglify Telepítés: Modul használata: var uglify = require('gulp-uglify'); gulp.task('compress', function() { return gulp.src('lib/*.js').pipe(uglify()).pipe(gulp.dest('dist')); Paraméterezés: https://github.com/terinjokes/gulp-uglify

GULP-CSSO Összefűzi és minifyolja a csseket npm install gulp-csso --save-dev var gulp = require('gulp'); var csso = require('gulp-csso'); gulp.task('default', function () { return gulp.src('./main.css').pipe(csso()).pipe(gulp.dest('./out')); Telepítés: Modul használata: Paraméterezés: https://github.com/ben-eb/gulp-csso

GULP-CONCAT Fájlok összefűzése. Paraméterezés: https://github.com/contra/gulp-concat Példa: var concat = require('gulp-concat'); gulp.task('scripts', function() { return gulp.src('./lib/*.js').pipe(concat('all.js')).pipe(gulp.dest('./dist/'));

GULP Mindig a feladathoz keresünk eszközt és nem az eszközhöz feladatot!!! Ez gulp esetében is igaz. Csak akkor használjuk, amikor tényleg szükség van rá.