Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JavaScript Assíncrono
Search
Vinicius Baggio Fuentes
September 14, 2013
Programming
400
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaScript Assíncrono
Palestra sobre javascript usando promises.
Vinicius Baggio Fuentes
September 14, 2013
More Decks by Vinicius Baggio Fuentes
See All by Vinicius Baggio Fuentes
Programação funcional para fazer Ruby melhor
vinibaggio
1
730
Other Decks in Programming
See All in Programming
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.6k
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
500
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
Kotlinの15年とServer-Side Kotlin
n_takehata
1
150
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
気持ちぃ〜角丸 Squircle
ryu1013
0
310
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
410
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
Featured
See All Featured
The SEO identity crisis: Don't let AI make you average
varn
0
590
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
Writing Fast Ruby
sferik
630
63k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
HDC tutorial
michielstock
2
960
GitHub's CSS Performance
jonrohan
1033
470k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
4 Signs Your Business is Dying
shpigford
187
23k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Transcript
JavaScript assíncrono then Vinícius Baggio Fuentes Wednesday, September 18, 13
Words Matter Wednesday, September 18, 13
Wednesday, September 18, 13
User profile Wednesday, September 18, 13
User profile Post data Wednesday, September 18, 13
User profile Post data Notes Wednesday, September 18, 13
User profile Post data Notes read later collection collab Wednesday,
September 18, 13
read next recommended rec. stats further reading Wednesday, September 18,
13
várias formas de resolver • SQL Joins absurdos • Denormalização*
dos dados • Materialized Views (???) • Buscar em etapa (pipeline) * Tradução tosca!! Wednesday, September 18, 13
Denormalização + Pipeline* * Esta é apenas uma simulação inventada
e qualquer semelhança com a realidade é um mero acidente. Post + Anotações + Further reading Perfil, foto etc Recomendações + stats Read next Compõe e serve Wednesday, September 18, 13
fetchPostData(id, function (err, post) { fetchProfileData(post.profileId, function (err, profile) {
fetchRecommendation(id, function (err, recStats) { fetchReadNext(id, function (err, readNext) { render({ post: renderPartial(post), profile: renderPartial(profile), recStats: renderPartial(recStats), readNext: renderPartial(readNext), }) }) }) }) }) Wednesday, September 18, 13
fetchPostData(id, function (err, post) { fetchProfileData(post.profileId, function (err, profile) {
fetchRecommendation(id, function (err, recStats) { fetchReadNext(id, function (err, readNext) { render({ post: renderPartial(post), profile: renderPartial(profile), recStats: renderPartial(recStats), readNext: renderPartial(readNext), }) }) }) }) }) LOL NODE Wednesday, September 18, 13
fetchPostData(id, function (err, post) { fetchProfileData(post.profileId, function (err, profile) {
fetchRecommendation(id, function (err, recStats) { fetchReadNext(id, function (err, readNext) { render({ post: renderPartial(post), profile: renderPartial(profile), recStats: renderPartial(recStats), readNext: renderPartial(readNext), }) }) }) }) }) Wednesday, September 18, 13
Post + Anotações + Further reading Perfil, foto etc Recomendações
+ stats Read next Renderiza e serve Denormalização + Pipeline + concorrência Wednesday, September 18, 13
var data = {} fetchPostData(id, function (err, post) { data.post
= post fetchProfileData(post.profileId, function (err, profile) { data.profile = renderPartial(profile) }) fetchRecommendation(id, function (err, recStats) { data.recStats = renderPartial(recStats) }) fetchReadNext(id, function (err, readNext) { data.readNext = renderPartial(readNext) }) }) process.nextTick(function tryRenderData () { if (data.post && data.profile && data.recStats && data.readNext) { render(data) } else { process.nextTick(tryRenderData) } }) Wednesday, September 18, 13
Futures Wednesday, September 18, 13
var id = '7c95f3526713' var post = future(fetchPostData, id) var
recStats = future(fetchRecommendation, id) var readNext = future(fetchReadNext, id) var profile = future(fetchProfileData, post.realize().profileId) var postPartial = future(renderPartial, post) var recStatsPartial = future(renderPartial, recStats) var readNextPartial = future(renderPartial, readNext) var profilePartial = future(renderPartial, profile) render({ post: postPartial.realize(), recStats: recStatsPartial.realize(), profile: profilePartial.realize(), readNext: profilePartial.realize(), }) Wednesday, September 18, 13
future() realize() Wednesday, September 18, 13
var id = '7c95f3526713' var post = future(fetchPostData, id) var
recStats = future(fetchRecommendation, id) var readNext = future(fetchReadNext, id) var profile = future(fetchProfileData, post.realize().profileId) var postPartial = future(renderPartial, post) var recStatsPartial = future(renderPartial, recStats) var readNextPartial = future(renderPartial, readNext) var profilePartial = future(renderPartial, profile) render({ post: postPartial.realize(), recStats: recStatsPartial.realize(), profile: profilePartial.realize(), readNext: profilePartial.realize(), }) Cenário A: função demora a retornar retorna rápido { t realize() bloqueia retorna rápido { realize() bloqueia Wednesday, September 18, 13
var id = '7c95f3526713' var post = future(fetchPostData, id) var
recStats = future(fetchRecommendation, id) var readNext = future(fetchReadNext, id) var profile = future(fetchProfileData, post.realize().profileId) var postPartial = future(renderPartial, post) var recStatsPartial = future(renderPartial, recStats) var readNextPartial = future(renderPartial, readNext) var profilePartial = future(renderPartial, profile) render({ post: postPartial.realize(), recStats: recStatsPartial.realize(), profile: profilePartial.realize(), readNext: profilePartial.realize(), }) Cenário B: função executa rápido retorna rápido { t realize() retorna rápido retorna rápido { realize() retorna rápido Wednesday, September 18, 13
Promises Wednesday, September 18, 13
var id = '7c95f3526713' var postPromise = fcall(fetchPostData, id) var
recStatsPromise = fcall(fetchRecommendation, id).then(renderPartial) var readNextPromise = fcall(fetchReadNext, id).then(renderPartial) var postPartialPromise = postPromise.then(renderPartial) var profilePromise = postPromise.then(function (post) { return fcall(fetchProfileData, post.profileId) }) all(postPartialPromise, recStatsPromise, readNextPromise, profilePromise) .then(function (postPartial, recStatsPartial, readNextPartial, profilePartial) { render({ post: postPartial, recStats: recStatsPartial, profile: profilePartial, readNext: profilePartial, }) }) Wednesday, September 18, 13
var id = '7c95f3526713' var postPromise = fetchPostData(id) var recStatsPromise
= fetchRecommendation(id).then(renderPartial) var readNextPromise = fetchReadNext(id).then(renderPartial) var postPartialPromise = postPromise.then(renderPartial) var profilePromise = postPromise.then(function (post) { return fetchProfileData(post.profileId) }) all(postPartialPromise, recStatsPromise, readNextPromise, profilePromise) .then(function (postPartial, recStatsPartial, readNextPartial, profilePartial) { render({ post: postPartial, recStats: recStatsPartial, profile: profilePartial, readNext: profilePartial, }) }) Wednesday, September 18, 13
Grandes sistemas que usam programação funcional tendem a parecer como
uma montadora de automóveis Wednesday, September 18, 13
function createPost(req, res) { reqFormData(req, 'post') .then(validateNewPost) .then(createPost) .then(function (post)
{ res.render('posts.show', {post: post}) }) .fail(function (error) { res.render422('posts.new', error) }) } Wednesday, September 18, 13
function createPost(req, res) { reqFormData(req, 'post') .then(validateNewPost) .then(createPost) .then(function (post)
{ res.render('posts.show', {post: post}) }) .fail(function (error) { res.render422('posts.new', error) }) } function validatePost(formData) { return Q.all( _validateTitle(formData), _validateBody(formData) ).then(function () { return formData }) } Wednesday, September 18, 13
function createPost(req, res) { reqFormData(req, 'post') .then(validateNewPost) .then(createPost) .then(function (post)
{ res.render('posts.show', {post: post}) }) .fail(function (error) { res.render422('posts.new', error) }) } MONADS! function validatePost(formData) { return Q.all( _validateTitle(formData), _validateBody(formData) ).then(function () { return formData }) } Wednesday, September 18, 13
ƒ wrap unwrap ƒ ƒ Wednesday, September 18, 13
Q • Promises/A+ • converter node.js-style callbacks p/ promises •
all/spread, progress noti cation Wednesday, September 18, 13
Q + _ + js = functional programming pro-style Wednesday,
September 18, 13
Functional JavaScript Wednesday, September 18, 13
Perguntas? Wednesday, September 18, 13
Créditos de imagens: http://www.flickr.com/photos/thomashawk/292253202 Wednesday, September 18, 13