jslab. Домников Виталий. "es6 генераторы и koa.js"

23
ES6 GENERATORS AND KOA.JS

Upload: geekslab

Post on 15-Jul-2015

112 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

ES6 GENERATORSAND KOA.JS

Page 2: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

VITALY DOMNIKOV

GITHUB: @DOTCYPRESS

TWITTER: @DOTCYPRESS

Page 3: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

HAPPY JS DEVELOPMENT

fs.readFile(inputFile, function (err, data) { if (err) return res.status(500).send(err); process1(data, function (err, data) { if (err) return res.status(500).send(err); process2(data, function (err, data) { if (err) return res.status(500).send(err); process3(data, function (err, data) { if (err) return res.status(500).send(err); fs.writeFile(outputFile, data, function (err) { if (err) return res.status(500).send(err); res.status(200).send('YEAH'); }); }); }); });});

Page 4: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"
Page 5: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

MIRACLE

//node --harmony sample.js

var sampleGenerator = function *() { yield 1; yield 2;}var generator = sampleGenerator();console.log(generator.next()); // { value: 1, done: false }console.log(generator.next()); // { value: 2, done: false }console.log(generator.next()); // { value: undefined, done: true }

Page 6: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

GENERATORS METHODSnext()

This is used to resume the execution.

generator.next();

// Result:{ value: 1, done: false}

Page 7: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

GENERATORS METHODSthrow()

This is used to throw an error or exception at anystep.

generator.throw(new Error("BSOD"));

Page 8: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"
Page 9: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

FIBBONACI

var fibbonaciGenerator = function *() { var acc = 1; var result = 0; while (true) { yield result; var temp = result; result += acc; acc = temp; }};

var generator = fibbonaciGenerator();console.log(generator.next()); // { value: 0, done: false }console.log(generator.next()); // { value: 1, done: false }console.log(generator.next()); // { value: 1, done: false }console.log(generator.next()); // { value: 2, done: false }

Page 10: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

DELEGATING YIELD

var sampleGenerator = function *() { yield 1; yield 2;}

var delegatedGenerator = function *() { yield* sampleGenerator(); yield 3; yield 4;}var generator = delegatedGenerator();console.log(generator.next()); // { value: 1, done: false }console.log(generator.next()); // { value: 2, done: false }console.log(generator.next()); // { value: 3, done: false }console.log(generator.next()); // { value: 4, done: true }

Page 11: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

COGENERATOR BASED CONTROL FLOWGOODNESS FOR NODEJS AND THEBROWSER, USING PROMISES,LETTING YOU WRITE NON­BLOCKINGCODE IN A NICE­ISH WAY.

https://github.com/tj/co

Page 12: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

COThe "yieldable" objects currently supported are:

promisesthunks (functions)array (parallel execution)objects (parallel execution)generators (delegation)generator functions (delegation)

Page 13: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

CO SAMPLE

var co = require('co');var thunkify = require('thunkify');var request = require('request');var get = thunkify(request.get);

co(function *(){ var a = yield get('http://google.com'); var b = yield get('http://yahoo.com'); var c = yield get('http://cloudup.com'); console.log(a[0].statusCode); console.log(b[0].statusCode); console.log(c[0].statusCode);})();

Page 14: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

THUNKIFYTURN A REGULAR NODE FUNCTIONINTO ONE WHICH RETURNS ATHUNK.

https://github.com/tj/node­thunkify

var thunkify = require('thunkify');var fs = require('fs');

var read = thunkify(fs.readFile);

read('package.json', 'utf8')(function(err, str){

});

Page 15: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"
Page 16: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

KOA.JSNEXT GENERATION WEBFRAMEWORK FOR NODE.JS

http://koajs.com/

Page 17: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

HELLO WORLD

var koa = require('koa');var app = koa();

app.use(function *(){ this.body = 'Hello World';});

app.listen(3000);

Page 18: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

CASCADING

var koa = require('koa');var app = koa();

app.use(function *(next){ var start = new Date; yield next; var ms = new Date - start; this.set('X-Response-Time', ms + 'ms');});

app.use(function *(){ this.body = 'Hello World';});

app.listen(3000);

Page 19: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

CONTEXT

app.use(function *(){ this; // is the Context this.request; // is a koa Request. this.response; // is a koa Response. this.req; // nodejs request. this.res; // nodejs response.});

Page 20: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

ERROR HANDLING

app.use(function *(next) { try { yield next; } catch (err) { this.app.emit('error', err, this); this.throw(500, 'Houston we have a problem') }});

Page 21: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"

BATTERIES NOT INCLUDED

RoutingFile ServingCompressionCachingAuthenticationSessionsetc.

KOA middlewares

Page 22: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"
Page 23: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"