SlideShare a Scribd company logo
자바스크립트비동기코드
(AsynchronousCodeinJavascript)
개인적으로공부한내용을정리한것으로잘못된내용이있을수있습니다.
목차
1.비동기코드란?
2.자바스크립트비동기코드작성방법
Callback
Promise
Async & Await
비동기(Asynchronous)란?
비동기코드작성법에대해알아보자.
다음코드의결과는?
console.log('Before');
const user = getUser(1);
console.log(user);
console.log('After');
function getUser(id){
setTimeout(()=>{
return {id: id, gitHubUserName: 'Sony'};
}, 2000);
}
위예제를실행한결과는다음과같다.
Before
undefined
After
user 는 undefined 가뜬다.
그이유는 getUser() 함수가실행하는 setTimeout() 함수가비동
기함수이기때문이다.
어떻게하면비동기함수를제어할수있을까?
자바스크립트에서비동기코드를작성하는방법은크게세가지가있다.
다음세가지방법을이용하여위문제를해결해보자.
비동기코드를작성하는방법
1. Callback
2. Promise
3. Async&await
Callback
console.log('Before');
getUser(1, user => console.log(user));
console.log('After');
function getUser(id, callback){
setTimeout(()=>{
callback({id: id, gitHubUserName: 'Sony'});
}, 2000);
}
위코드를보면콜백함수를이용해서비동기처리를했다.
위코드를실행한결과는다음과같다.
Before
After
{ id: 1, gitHubUserName: 'Sony' }
위예제는특정유저의객체( user object )를가져오는간단한로직이다.
로직을조금더추가해보자
1. getUser() :특정유저객체( user object )를가져온다.
2. getRepositories() :해당유저의깃허브레퍼지토리를가져온다.
3. getCommits() :해당레퍼지토리의커밋을가져온다.
function getUser(id, callback) {
setTimeout(() => {
console.log('Reading a user from a database..');
callback({id: id, gitHubUserName: 'Sony'});
}, 2000);
}
function getRepositories(username, callback) {
setTimeout(() => {
console.log('Calling GitHub API..');
callback(['repo1', 'repo2', 'repo3']);
}, 2000)
}
function getCommits(repos, callback) {
setTimeout(()=>{
console.log('Here are the commits from ' + repos);
callback("commit");
}, 2000)
}
CallbackHell
console.log('Before');
getUser(1, (user)=>{
console.log('User', user);
getRepositories(user.gitHubUserName, (repos) =>{
console.log('Repos', repos);
getCommits(repos, (commits)=>{
console.log("Commits", commits);
})
})
})
console.log('After');
CallbackHell
콜백이콜백을호출하는구조이다.
따라서코드는더복잡해지고가독성이낮아지는문제가발생한다.
어떻게하면CallbackHell을해결할수있을까?
콜백함수를분리한다.
CallbackHell에서벗어나기
익명의콜백함수를이름있는named함수로대체한다.
console.log('Before');
getUser(1, (user)=>{
getRepositories(user.gitHubUserName, (repos) =>{
getCommits(repos, (commits)=>{
})
})
})
console.log('After');
console.log('Before');
getUser(1, gRepositories);
console.log('After');
function gRepositories(user) {
getRepositories(user.gitHubUserName, gCommits);
}
function gCommits(repos) {
getCommits(repos, displayCommits);
}
function displayCommits(commits) {
console.log('Commits', commits);
}
getUser(1, (user) => {
getRepositories(user.gitHubUserName, (repos) =>{
getCommits(repos, (commits)=>{
})
})
})
위처럼중첩된콜백을가진기존코드가아래와같이변경되었다.
getUser(1, gRepositories);
named함수를사용해서콜백지옥(callbackhell)에서벗어났다.
하지만필요한함수가늘어나코드가길어졌고가독성도좋지않다.
비동기코드를작성하는더좋은방법은없을까?
Promise
Promise란
Promise는비동기이벤트작업의결과를리턴하는객체이다.
Promise객체는비동기작업이완료되었을때
결과값( value )또는에러( error )를리턴한다.
Promise의상태(state)정보
프로미스객체는다음세가지상태중하나를갖는다.
1. Pending
promise객체를생성했을때의상태
2. Resolved / Fulfilled
비동기처리가정상적으로이루어졌을때의상태
value 를리턴한다.
3. Rejected
비동기처리가실패했을때의상태
error 를리턴한다.
Promiseobject
Promise를사용하기위해 Promise 객체를생성한다.
Promise객체는아래와같은명령어로생성한다.
new Promise((resolve,reject)={})
Promise객체는두개의파라미터( resolve , reject )를인자값으로
받는다.
resolve , reject 는모두함수이다.
resolve 는비동기처리가성공했을때의결과( value )를리턴한다.
reject 는비동기처리가실패했을때에러( error )를리턴한다.
Promise가리턴한결과값은어떻게받을까?
Promise객체는 then 과 catch 라는두메서드를갖는다.
then :Promise객체가 resolve 한결과값을받는다.
catch :Promise객체가 reject 한결과값을받는다.
Promise 를이용해비동기작업을처리해보자
const p = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
}, 2000);
});
p.then(result => console.log('Result: ', result));
위코드를실행하면2초뒤에아래와같은결과값을얻는다.
Result: 1
이번에는비동기작업도중에에러를발생시켜보자.
const p = new Promise((resolve, reject) => {
setTimeout(() => {
// resolve(1);
reject(new Error('ERROR!!!'));
}, 2000);
});
p.then(result => console.log('Result: ', result))
.catch(err => console.log('Error: ', err.message));
위코드를실행하면2초뒤에아래와같은결과값을얻는다.
Error: ERROR!!!
비동기작업은callback이아닌Promise를사용하자
콜백함수를인자값으로받는비동기함수를
Promise를리턴하는함수로수정하는방법
1.Promise객체를return하도록한다.
2.callback함수부분을resolve로바꾼다.
function getUser(id, callback) {
setTimeout(() => {
callback({ id: id, gitHubUsername: 'sony' });
}, 2000);
}
callback 함수부분을 Promise 객체의 resolve 로대체한다
function getUser(id) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({ id: id, gitHubUsername: 'sony' });
}, 2000);
});
}
resolve 는비동기처리결과값( value )을리턴한다.
위예제에서의결과값( value )은 { id: id, gitHubUsername:
'sony' } 이다.
Exercise
위에서배운내용을바탕으로다음코드를수정해보자.
console.log('Before');
getUser(1, (user) => {
getRepositories(user.gitHubUsername, (repos) => {
getCommits(repos[0], (commits) => {
console.log(commits);
})
})
});
console.log('After');
function getUser(id, callback) {
setTimeout(() => {
console.log('Reading a user from a database...');
callback({ id: id, gitHubUsername: 'sony' });
}, 2000);
}
function getRepositories(username, callback) {
setTimeout(() => {
console.log('Calling GitHub API...');
callback(['repo1', 'repo2', 'repo3']);
}, 2000);
}
function getCommits(repo, callback) {
setTimeout(() => {
console.log('Calling GitHub API...');
callback(['commit']);
}, 2000);
}
수정한코드는다음과같다.
console.log('Before');
getUser(1)
.then(user => getRepositories(user.gitHubUsername))
.then(repos => getCommits(repos[0]))
.then(commits => console.log(commits))
.catch(err => console.log("Error", err.message));
console.log('After');
function getUser(id) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Reading a user from a database...');
resolve({ id: id, gitHubUsername: 'sony' });
}, 2000);
});
}
function getRepositories(username) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Calling GitHub API...');
resolve(['repo1', 'repo2', 'repo3']);
}, 2000);
})
}
function getCommits(repo) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Calling GitHub API...');
resolve(['commit']);
}, 2000);
})
}
// callback based approach
getUser(1, (user) => {
getRepositories(user.gitHubUsername, (repos) => {
getCommits(repos[0], (commits) => {
console.log(commits);
})
})
});
// promise based approach
getUser(1)
.then(user => getRepositories(user.gitHubUsername))
.then(repos => getCommits(repos[0]))
.then(commits => console.log(commits))
.catch(err => console.log("Error", err.message));
Async&Await
Asnyc&Await이란
비동기코드를동기코드처럼보이게해준다.
코드가간결해지고가독성이높아진다.
// Promise-based approach
getUser(1)
.then(user => getRepositories(user.gitHubUsername))
.then(repos => getCommits(repos[0]))
.then(commits => console.log('Commits', commits));
위코드는 Promise 기반으로작성한비동기코드이다.
위코드를 Async & Await 을이용하여작성해보자.
// Promise-based approach
getUser(1)
.then(user => getRepositories(user.gitHubUsername))
.then(repos => getCommits(repos[0]))
.then(commits => console.log('Commits', commits));
// Async & Await based approach
const user = await getUser(1);
const repos = await getRepositories(user.gitHubUsername);
const commits = await getCommits(repos[0]);
console.log(commits);
각각의변수에는Promise함수가resolve한결과값이담긴다.
user 에는 getUser() 에서resolve한값이담긴다.
repos 에는 getRopositories() 에서resolve한값이담긴다.
commits 에는 getCommits() 에서resolve한값이담긴다.
async&awaitkeyword
await을사용하기위해서는async키워드가붙은함수가필요하다.
// Async & Await based approach
async function displayCommits() {
const user = await getUser(1);
const repos = await getRepositories(user.gitHubUsername);
const commits = await getCommits(repos[0]);
console.log(commits);
}
displayCommits();
console.log('Before');
displayCommits();
console.log('After');
// Async & Await based approach
async function displayCommits() {
const user = await getUser(1);
const repos = await getRepositories(user.gitHubUsername);
const commits = await getCommits(repos[0]);
console.log(commits);
}
function getUser(id) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Reading a user from a database...');
resolve({ id: id, gitHubUsername: 'mosh' });
}, 2000);
});
}
function getRepositories(username) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Calling GitHub API...');
resolve(['repo1', 'repo2', 'repo3']);
}, 2000);
})
}
function getCommits(repo) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Calling GitHub API...');
resolve(['commit']);
}, 2000);
})
}
Syntacticsugar
Async&AwaitarebuiltontopofPromises
Async & Await 의내부적인동작방식은 Promise 와동일하다.
// Promise-based approach
getUser(1)
.then(user => getRepositories(user.gitHubUsername))
.then(repos => getCommits(repos[0]))
.then(commits => console.log('Commits', commits));
// Async & Await based approach
const user = await getUser(1);
const repos = await getRepositories(user.gitHubUsername);
const commits = await getCommits(repos[0]);
console.log(commits);
마치Javascript에서 class 명령어를사용해도내부적으로는
prototype 형태로객체를생성하는것과비슷하다.
동기(synchronous)코드처럼보이지만사실은비동기로동작하는코드
이다.
try..catch
Async & Await 에서에러처리를하기위해서는 try..catch 구문
을사용한다.
// Async & Await based approach
async function displayCommits() {
try {
const user = await getUser(1);
const repos = await getRepositories(user.gitHubUsername
const commits = await getCommits(repos[0]);
console.log(commits);
} catch (error) {
console.log('Error', error.message);
}
}
displayCommits();
// Callback based approach
getUser(1, (user)=>{
getRepositories(user.gitHubUserName, (repos) =>{
getCommits(repos, (commits)=>{
console.log("Commits", commits);
})
})
})
// Promise based approach
getUser(1)
.then(user => getRepositories(user.gitHubUsername))
.then(repos => getCommits(repos[0]))
.then(commits => console.log(commits))
.catch(err => console.log("Error", err.message));
// Async & Await based approach
async function displayCommits() {
const user = await getUser(1);
const repos = await getRepositories(user.gitHubUsername);
const commits = await getCommits(repos[0]);
console.log(commits);
}
정리
자바스크립트비동기코드작성방법
Callback
Promise
Async & Await
Callback
CallbackHell문제..Promise나Async&Await을사용하자
Promise
1.Promise객체는다음세가지상태를갖는다.
1. Pending
2. Resolved / Fulfilled
3. Rejected
2.비동기결과를확인하기위해다음두메서드를사용한다.
then :Promise객체가 resolve 한결과값을받는다.‑성공
catch :Promise객체가 reject 한결과값을받는다.‑실패
Async&Await
1.비동기코드를동기코드처럼보이게해준다.
2.await은async키워드가붙은함수안에서사용한다.
3.error처리를위해서는try‑catch문으로감싸준다.
4.내부동작은Promise와동일하다.
Promise와Async&Await의내부동작방식은동일하다.
어떠것을사용하냐는개인취향이다.
따라서팀또는개인의선호도에따라사용하면될것같다.
감사합니다.
질문&피드백환영합니다.

More Related Content

What's hot

Меняем javascript с помощью javascript
Меняем javascript с помощью javascriptМеняем javascript с помощью javascript
Меняем javascript с помощью javascript
Pavel Volokitin
 
Dynamic C++ ACCU 2013
Dynamic C++ ACCU 2013Dynamic C++ ACCU 2013
Dynamic C++ ACCU 2013
aleks-f
 
The Ring programming language version 1.6 book - Part 71 of 189
The Ring programming language version 1.6 book - Part 71 of 189The Ring programming language version 1.6 book - Part 71 of 189
The Ring programming language version 1.6 book - Part 71 of 189
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 65 of 180
The Ring programming language version 1.5.1 book - Part 65 of 180The Ring programming language version 1.5.1 book - Part 65 of 180
The Ring programming language version 1.5.1 book - Part 65 of 180
Mahmoud Samir Fayed
 
Node 관계형 데이터베이스_바인딩
Node 관계형 데이터베이스_바인딩Node 관계형 데이터베이스_바인딩
Node 관계형 데이터베이스_바인딩HyeonSeok Choi
 
The zen of async: Best practices for best performance
The zen of async: Best practices for best performanceThe zen of async: Best practices for best performance
The zen of async: Best practices for best performance
Microsoft Developer Network (MSDN) - Belgium and Luxembourg
 
Dynamic C++ Silicon Valley Code Camp 2012
Dynamic C++ Silicon Valley Code Camp 2012Dynamic C++ Silicon Valley Code Camp 2012
Dynamic C++ Silicon Valley Code Camp 2012
aleks-f
 
Current State of Coroutines
Current State of CoroutinesCurrent State of Coroutines
Current State of Coroutines
Guido Pio Mariotti
 
Test driven game development silly, stupid or inspired?
Test driven game development   silly, stupid or inspired?Test driven game development   silly, stupid or inspired?
Test driven game development silly, stupid or inspired?Eric Smith
 
Test Driven Cocos2d
Test Driven Cocos2dTest Driven Cocos2d
Test Driven Cocos2d
Eric Smith
 
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
병완 임
 
Bangun datar dan bangun ruang
Bangun datar dan bangun ruangBangun datar dan bangun ruang
Bangun datar dan bangun ruang
SanSan Yagyoo
 
Silicon Valley JUG: JVM Mechanics
Silicon Valley JUG: JVM MechanicsSilicon Valley JUG: JVM Mechanics
Silicon Valley JUG: JVM Mechanics
Azul Systems, Inc.
 
The State of JavaScript
The State of JavaScriptThe State of JavaScript
The State of JavaScript
Domenic Denicola
 
Kotlin coroutine - the next step for RxJava developer?
Kotlin coroutine - the next step for RxJava developer?Kotlin coroutine - the next step for RxJava developer?
Kotlin coroutine - the next step for RxJava developer?
Artur Latoszewski
 
The Ring programming language version 1.10 book - Part 81 of 212
The Ring programming language version 1.10 book - Part 81 of 212The Ring programming language version 1.10 book - Part 81 of 212
The Ring programming language version 1.10 book - Part 81 of 212
Mahmoud Samir Fayed
 
CUDA Deep Dive
CUDA Deep DiveCUDA Deep Dive
CUDA Deep Dive
krasul
 
TDC2018SP | Trilha Kotlin - Programacao assincrona utilizando Coroutines
TDC2018SP | Trilha Kotlin - Programacao assincrona utilizando CoroutinesTDC2018SP | Trilha Kotlin - Programacao assincrona utilizando Coroutines
TDC2018SP | Trilha Kotlin - Programacao assincrona utilizando Coroutines
tdc-globalcode
 

What's hot (20)

Меняем javascript с помощью javascript
Меняем javascript с помощью javascriptМеняем javascript с помощью javascript
Меняем javascript с помощью javascript
 
Dynamic C++ ACCU 2013
Dynamic C++ ACCU 2013Dynamic C++ ACCU 2013
Dynamic C++ ACCU 2013
 
The Ring programming language version 1.6 book - Part 71 of 189
The Ring programming language version 1.6 book - Part 71 of 189The Ring programming language version 1.6 book - Part 71 of 189
The Ring programming language version 1.6 book - Part 71 of 189
 
The Ring programming language version 1.5.1 book - Part 65 of 180
The Ring programming language version 1.5.1 book - Part 65 of 180The Ring programming language version 1.5.1 book - Part 65 of 180
The Ring programming language version 1.5.1 book - Part 65 of 180
 
Node 관계형 데이터베이스_바인딩
Node 관계형 데이터베이스_바인딩Node 관계형 데이터베이스_바인딩
Node 관계형 데이터베이스_바인딩
 
The zen of async: Best practices for best performance
The zen of async: Best practices for best performanceThe zen of async: Best practices for best performance
The zen of async: Best practices for best performance
 
Dynamic C++ Silicon Valley Code Camp 2012
Dynamic C++ Silicon Valley Code Camp 2012Dynamic C++ Silicon Valley Code Camp 2012
Dynamic C++ Silicon Valley Code Camp 2012
 
Current State of Coroutines
Current State of CoroutinesCurrent State of Coroutines
Current State of Coroutines
 
Test driven game development silly, stupid or inspired?
Test driven game development   silly, stupid or inspired?Test driven game development   silly, stupid or inspired?
Test driven game development silly, stupid or inspired?
 
Test Driven Cocos2d
Test Driven Cocos2dTest Driven Cocos2d
Test Driven Cocos2d
 
分散式系統
分散式系統分散式系統
分散式系統
 
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
 
Bangun datar dan bangun ruang
Bangun datar dan bangun ruangBangun datar dan bangun ruang
Bangun datar dan bangun ruang
 
Silicon Valley JUG: JVM Mechanics
Silicon Valley JUG: JVM MechanicsSilicon Valley JUG: JVM Mechanics
Silicon Valley JUG: JVM Mechanics
 
The State of JavaScript
The State of JavaScriptThe State of JavaScript
The State of JavaScript
 
Kotlin coroutine - the next step for RxJava developer?
Kotlin coroutine - the next step for RxJava developer?Kotlin coroutine - the next step for RxJava developer?
Kotlin coroutine - the next step for RxJava developer?
 
Lecture1 classes3
Lecture1 classes3Lecture1 classes3
Lecture1 classes3
 
The Ring programming language version 1.10 book - Part 81 of 212
The Ring programming language version 1.10 book - Part 81 of 212The Ring programming language version 1.10 book - Part 81 of 212
The Ring programming language version 1.10 book - Part 81 of 212
 
CUDA Deep Dive
CUDA Deep DiveCUDA Deep Dive
CUDA Deep Dive
 
TDC2018SP | Trilha Kotlin - Programacao assincrona utilizando Coroutines
TDC2018SP | Trilha Kotlin - Programacao assincrona utilizando CoroutinesTDC2018SP | Trilha Kotlin - Programacao assincrona utilizando Coroutines
TDC2018SP | Trilha Kotlin - Programacao assincrona utilizando Coroutines
 

Similar to 자바스크립트 비동기 코드(Javascript asyncronous code)

JavaScript Promises
JavaScript PromisesJavaScript Promises
JavaScript Promises
Tomasz Bak
 
Asynchronous JS in Odoo
Asynchronous JS in OdooAsynchronous JS in Odoo
Asynchronous JS in Odoo
Odoo
 
From Node.js to Design Patterns
From Node.js to Design Patterns From Node.js to Design Patterns
From Node.js to Design Patterns
Luciano Mammino
 
JavaTalks: OOD principles
JavaTalks: OOD principlesJavaTalks: OOD principles
JavaTalks: OOD principles
stanislav bashkirtsev
 
SenchaTouch 2 and Sencha.io
SenchaTouch 2 and Sencha.ioSenchaTouch 2 and Sencha.io
SenchaTouch 2 and Sencha.io
Nils Dehl
 
Think Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJSThink Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJS
Adam L Barrett
 
ES6 Overview
ES6 OverviewES6 Overview
ES6 Overview
Bruno Scopelliti
 
Reduxing like a pro
Reduxing like a proReduxing like a pro
Reduxing like a pro
Boris Dinkevich
 
ES6, 잘 쓰고 계시죠?
ES6, 잘 쓰고 계시죠?ES6, 잘 쓰고 계시죠?
ES6, 잘 쓰고 계시죠?
장현 한
 
JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?
Doug Hawkins
 
RxJS ‘Marble’ programming
RxJS ‘Marble’ programmingRxJS ‘Marble’ programming
RxJS ‘Marble’ programming
Stas Rivkin
 
Call stack, event loop and async programming
Call stack, event loop and async programmingCall stack, event loop and async programming
Call stack, event loop and async programming
Masters Academy
 
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...
GITS Indonesia
 
Angular2 rxjs
Angular2 rxjsAngular2 rxjs
Angular2 rxjs
Christoffer Noring
 
jQuery Bay Area Conference 2010
jQuery Bay Area Conference 2010jQuery Bay Area Conference 2010
jQuery Bay Area Conference 2010
mennovanslooten
 
Guide to Node.js: Basic to Advanced
Guide to Node.js: Basic to AdvancedGuide to Node.js: Basic to Advanced
Guide to Node.js: Basic to Advanced
Espeo Software
 
Async History - javascript
Async History - javascriptAsync History - javascript
Async History - javascript
Nishchit Dhanani
 
Introdução à programação orientada para aspectos
Introdução à programação orientada para aspectosIntrodução à programação orientada para aspectos
Introdução à programação orientada para aspectos
Manuel Menezes de Sequeira
 
Angular promises and http
Angular promises and httpAngular promises and http
Angular promises and http
Alexe Bogdan
 

Similar to 자바스크립트 비동기 코드(Javascript asyncronous code) (20)

JavaScript Promises
JavaScript PromisesJavaScript Promises
JavaScript Promises
 
Asynchronous JS in Odoo
Asynchronous JS in OdooAsynchronous JS in Odoo
Asynchronous JS in Odoo
 
From Node.js to Design Patterns
From Node.js to Design Patterns From Node.js to Design Patterns
From Node.js to Design Patterns
 
JavaTalks: OOD principles
JavaTalks: OOD principlesJavaTalks: OOD principles
JavaTalks: OOD principles
 
SenchaTouch 2 and Sencha.io
SenchaTouch 2 and Sencha.ioSenchaTouch 2 and Sencha.io
SenchaTouch 2 and Sencha.io
 
Think Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJSThink Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJS
 
ES6 Overview
ES6 OverviewES6 Overview
ES6 Overview
 
Reduxing like a pro
Reduxing like a proReduxing like a pro
Reduxing like a pro
 
ES6, 잘 쓰고 계시죠?
ES6, 잘 쓰고 계시죠?ES6, 잘 쓰고 계시죠?
ES6, 잘 쓰고 계시죠?
 
JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?
 
Pengenalan blaast platform sdk
Pengenalan blaast platform sdkPengenalan blaast platform sdk
Pengenalan blaast platform sdk
 
RxJS ‘Marble’ programming
RxJS ‘Marble’ programmingRxJS ‘Marble’ programming
RxJS ‘Marble’ programming
 
Call stack, event loop and async programming
Call stack, event loop and async programmingCall stack, event loop and async programming
Call stack, event loop and async programming
 
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...
 
Angular2 rxjs
Angular2 rxjsAngular2 rxjs
Angular2 rxjs
 
jQuery Bay Area Conference 2010
jQuery Bay Area Conference 2010jQuery Bay Area Conference 2010
jQuery Bay Area Conference 2010
 
Guide to Node.js: Basic to Advanced
Guide to Node.js: Basic to AdvancedGuide to Node.js: Basic to Advanced
Guide to Node.js: Basic to Advanced
 
Async History - javascript
Async History - javascriptAsync History - javascript
Async History - javascript
 
Introdução à programação orientada para aspectos
Introdução à programação orientada para aspectosIntrodução à programação orientada para aspectos
Introdução à programação orientada para aspectos
 
Angular promises and http
Angular promises and httpAngular promises and http
Angular promises and http
 

Recently uploaded

How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
CatarinaPereira64715
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 

Recently uploaded (20)

How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 

자바스크립트 비동기 코드(Javascript asyncronous code)