์ด๋ค ๋ฒ์ ์ ๋น๋๊ธฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
2.6.1
(๋
ธ๋ ๋ฒ์ / ๋ธ๋ผ์ฐ์ ๋ฒ์ )์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ํ๊ฒฝ
8.11.3
๋ญ ํ์ด?
fileObj๊ฐ ์ธ๋ถ์์ ์ ๊ณต๋์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
async.auto({
download: (downloadCB) => {
if (fileObj) {
fs.writeFile(__dirname + โfileNew.txtโ, fileObj.content, 'base64', function (err) {
if (err){
return downloadCB(err);
}
return downloadCB(null , fileObj.generatedFileName); // works fine
});
} else {
let err = new Error('File not found');
return downloadCB(err);
}
},
collectData: ['download', async (results, collectCB) => {
console.log(typeof collectCB); // prints undefined
console.log(typeof results); // prints correct object
let res = await anHttpRequest();
if (res.response && res.response.statusCode == 200) {
return collectCB(null , 'fileCombined.txt'); // This is where the ISSUE happens
}
else if(res.response.statusCode >= 300) {
return collectCB(new Error('Request failed inside async-auto'));
}
}],
filterData: ['collectData', (results, filterCB) => {
doFilter(results.collectData, filterCB);
}],
})
๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ธฐ๋ฅผ ๊ธฐ๋ ํ์ต๋๊น?
collectData ์คํ์ด ์๋ฃ๋๋ฉด filterData๊ฐ collectCB ํจ์ ๋ด๋ถ์ ์ ๋ฌ ๋ ๋งค๊ฐ ๋ณ์ ์คํ์ ์์ํด์ผํฉ๋๋ค.
์ค์ ๊ฒฐ๊ณผ๋ ๋ฌด์์
๋๊น?
TypeError : collectCB๋ ํจ์๊ฐ ์๋๋๋ค.
๋์ผํ ์ฝ๋๊ฐ ๋ฒ์ 2.0.1์์๋ ์ ์คํ๋์ง๋ง 2.6.1๋ก ์ ๊ทธ๋ ์ด๋ ํ ํ ์๋์ด ์ค์ง๋์์ผ๋ฉฐ ์ฐ๋ฆฌ์๊ฒ ์ค์ํฉ๋๋ค. ๋ชจ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
async
ํจ์๋ ๋ค๋ฅด๊ฒ ์ทจ๊ธํ๋ฉฐ ์ฝ๋ฐฑ์ ์ ๋ฌํ์ง ์์ต๋๋ค. ๋์ return
๊ฐ (๋๋ throw
์ค๋ฅ)
์, StackOverflow์์ ๋์ผํ ๋ด์ฉ์ ๋ฐฐ์ ์ผ๋ฏ๋ก ์์ผ๋ก ๋๊ตฐ๊ฐ๊ฐ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌ ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ฌ๊ธฐ์ ๋์ผํ ์ฐธ์กฐ๋ฅผ ๊ฒ์ํ์ญ์์ค. Using-async-await-inside-async-auto-chain
์ด๊ฒ์ ํจ์๊ฐ ๋น๋๊ธฐ ์ธ ๊ฒฝ์ฐ async.parallel์๋ ์ ์ฉ๋๋ฉฐ ์ฝ๋ฐฑ์ ํธ์ถํ์ง ์๊ณ ๊ฐ์ ๋ฐํํด์ผํฉ๋๋ค. ์ด๊ฒ์ ๋ฌธ์์ ์์ ์ ์ถ๊ฐ๋์ด์ผํฉ๋๋ค.
async.parallel({
// NOTE: for async functions just return value or throw error
// don't use the callback
dates: async function(callback) {
var rr = await getDates(dbName, r.indi, idx);
return rr;
},
sdates: async function(callback) {
var rr = await getDates(dbName, r.spouse, idx);
return rr;
},
cdates: async function(callback) {
var rr = await getDates(dbName, r.cindi, idx);
return rr;
}
},
function(err, results) {
console.log(results);
});
๋ ๋ง์ async / await๋ฅผ ์ฌ์ฉํ์ฌ ์ง๊ธ ํ ์์๋ ์์ ์ ๊ฐ์กฐํ๊ธฐ ์ํด ๋ฌธ์์ ๋ง์ ์์ ๋ฅผ ๋ค์ ์์ฑํ๊ณ ์ถ์ต๋๋ค.
์ด ํจํค์ง์ ๊ธฐ๋ฅ ์ด์์ผ๋ก ๋ฌธ์๊ฐ ํ์ํฉ๋๋ค. ์์ผ๋ก ๋ ๋ง์ ์๋ฅผ ๋ณผ ์ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
async
ํจ์๋ ๋ค๋ฅด๊ฒ ์ทจ๊ธํ๋ฉฐ ์ฝ๋ฐฑ์ ์ ๋ฌํ์ง ์์ต๋๋ค. ๋์return
๊ฐ (๋๋throw
์ค๋ฅ)