Call-Back, Call-Back hell
- ๋น๋๊ธฐ ํจ์ : ์ฝ๋ฐฑ ํจ์ ์ฌ์ฉ
๋น๋๊ธฐ ๋์์ ์ฐ์
-
task1 ์คํ ์ดํ์ task2 ์คํ
-
task1 ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํด์ task2 ์คํ
-
์ฝ๋ฐฑ์ ์ฐ์๋ ํธ์ถ
-
ex) ์ด๋ฏธ์ง ์ ๋ก๋ ํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ, ๋ค์์ ์ด๋ฏธ์ง์์ ์ธ๋ค์ผ ์์ฑ ํ ์ ๋ก๋
-
์์ ์ฝ๋
function task1(args,function(result){
var arg2 = result.value;
task2(arg2,function(result){
});
});
Call-Back ํ์ถํ๊ธฐ
function task1(callback) {
console.log('Task1 ์์');
setTimeout(function() {
console.log('Task1 ๋');
callback();
}, 300);
}
function task2(callback) {
console.log('Task2 ์์');
setTimeout(function() {
console.log('Task2 ๋');
callback();
}, 200);
}
task1(function() {
task2(function() {
});
});
- ๊ฒฐ๊ณผ ํ๋ฉด
Async
- ๋น๋๊ธฐ ๋์์ ํ๋ฆ ์ ์ด ๋ชจ๋
- ์ค์น๋ฐฉ๋ฒ :
npm install async
Async ๋ํ์ ์ธ ๊ธฐ๋ฅ
- ์์ ์ ์ด :
series, seriesEach, parallels, waterfall
- ์ฝ๋ ์
(๋ฐฐ์ด, ๊ฐ์ฒด) :
each, forEachOf, map, filter
series(tasks,callback)
- ์์ฐจ์ ์ผ๋ก ์งํ
- call-backํธ์ถ : ๋ค์ Task๋ก ์งํ
- Task ์คํ ์ค ์๋ฌ : ๋ค์ Task๋ก ์คํ X โ ๋ง๋ฌด๋ฆฌ ์ฝ๋ฐฑ์ผ๋ก ์๋ฌ ์ ๋ฌ
async.series(
[task1, task2, task3], function(err, results) { // ์๋ฃ Call-Back
if ( err ) {
console.error('Error : ', err);
return;
}
console.log('๋น๋๊ธฐ ๋์ ๋ชจ๋ ์ข
๋ฃ ', results)
// result์๋ ๊ฐ Task์ ๊ฒฐ๊ณผ๊ฐ Array ํํ๋ก ์ ๋ฌ
});
waterfall
- ์ด์ Task์ ๊ฒฐ๊ณผ๊ฐ์ ๋ค์ Task Parameter๋ก ์ ๋ฌ
async.waterfall([
function task1(callback) {
callback(null,'value');
},
function task2(args, callback) {
callback(null,'value1','value2');
},
function task3(arg1, args2, callback) {
callback(null,'value1','value2','value3');
}
],
function(err, result){
}
);
parallel
- ์ฌ๋ฌ Task๋ฅผ ๋์์ ์คํ
- ๋ชจ๋ Task๋ฅผ ๋ง์น๋ฉด ์๋ฃ ์ฝ๋ฐฑ
async.parallel([
function (callback) {
callback(null,'value1');
},
function (callback) {
callback(null,'value2');
},
function (callback) {
callback(null,'value2');
}
]
function(err, result){
}
);
๋น๋๊ธฐ ์ํ ๋์ each
each(arr,iterator,callback)
async.each(arrary, function(item,callback){
// ๋ฐฐ์ด ๋ด ํญ๋ชฉ item์ ์ฌ์ฉํ๋ ๋น๋๊ธฐ ๋์
callback(null);
}, function(err){
// async.each ์๋ฃ
})
Promise
- ๋น๋๊ธฐ ๋์์ ํ๋ฆ์ ์ด
- JavaScript ES6์ ์ถ๊ฐ
new Promise(function(){
// ๋น๋๊ธฐ ๋์
});
Promise์ ์ํ
pending
: ๋์ ์๋ฃ ์ fullfilled
: ๋น๋๊ธฐ ๋์ ์ฑ๊ณตrejected
: ๋์ ์คํจ- ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ :
fullfilled
ํธ์ถ - ์๋ฌ์ํฉ :
rejected
ํธ์ถ
Promise ์ดํ์ ๋์ : then
function task1(fullfill, reject) {
console.log('Task1 ์์');
setTimeout(function() {
console.log('Task1 ๋');
//fullfill('Task1 ๊ฒฐ๊ณผ');
reject('Error msg');
}, 300);
}
function fullfilled(result) {
console.log('fullfilled : ', result);
}
function rejected(err) {
console.log('rejected : ', err);
}
new Promise(task1).then(fullfilled, rejected);
Promise๋ฅผ ์ฌ์ฉํ๋ Task
function task(){
return new Promise(function(fullfill,reject){
if(success)
fullfill('Success');
else
reject('Error');
});
}