JSLab. Домников Виталий. "ES6 генераторы и Koa.js"
-
Upload
geekslab -
Category
Technology
-
view
117 -
download
4
Transcript of JSLab. Домников Виталий. "ES6 генераторы и Koa.js"
![Page 1: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/1.jpg)
ES6 GENERATORSAND KOA.JS
![Page 2: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/2.jpg)
VITALY DOMNIKOV
GITHUB: @DOTCYPRESS
TWITTER: @DOTCYPRESS
![Page 3: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/3.jpg)
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"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/4.jpg)
![Page 5: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/5.jpg)
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"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/6.jpg)
GENERATORS METHODSnext()
This is used to resume the execution.
generator.next();
// Result:{ value: 1, done: false}
![Page 7: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/7.jpg)
GENERATORS METHODSthrow()
This is used to throw an error or exception at anystep.
generator.throw(new Error("BSOD"));
![Page 8: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/8.jpg)
![Page 9: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/9.jpg)
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"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/10.jpg)
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"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/11.jpg)
COGENERATOR BASED CONTROL FLOWGOODNESS FOR NODEJS AND THEBROWSER, USING PROMISES,LETTING YOU WRITE NONBLOCKINGCODE IN A NICEISH WAY.
https://github.com/tj/co
![Page 12: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/12.jpg)
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"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/13.jpg)
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"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/14.jpg)
THUNKIFYTURN A REGULAR NODE FUNCTIONINTO ONE WHICH RETURNS ATHUNK.
https://github.com/tj/nodethunkify
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"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/15.jpg)
![Page 17: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/17.jpg)
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"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/18.jpg)
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"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/19.jpg)
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"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/20.jpg)
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"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/21.jpg)
BATTERIES NOT INCLUDED
RoutingFile ServingCompressionCachingAuthenticationSessionsetc.
KOA middlewares
![Page 22: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/22.jpg)
![Page 23: JSLab. Домников Виталий. "ES6 генераторы и Koa.js"](https://reader033.fdocuments.us/reader033/viewer/2022051016/55a68e811a28abb27d8b4848/html5/thumbnails/23.jpg)