[javascript-issue01] for๋ฌธ๊ณผ ๋น๋๊ธฐ๐ฅด
// A ์์ญ์ ์ฝ๋๊ฐ ๋ค์ด๊ฐ
router.get('/', async (req, res) => { //async
try {
const students = await JoinedUser.find(req.query, ["userId", "alias", "jobId"])
.populate('userId', 'email name alias jobId').populate('jobId').exec()
/* A์์ญ */
res.json(result)
} catch (err) {
res.status(500).json({ success: false, error: err });
}
})
(1.1)
// map์ด ๋น๋๊ธฐ ํจ์ ์์ ์ธ์งํ์ง ๋ชปํ ์๋ชป๋ ์ฝ๋
let result = []
students.map(async(v,i)=>{
const account=await Account.findOne({'studentId':v._id})
await result.push({'name':v.userId.name,'email':v.userId.email,
'alias':v.alias,'job':v.jobId,'balance':account.currentBalance})
//console.log(i,result)
})
(1.2)
// map์ด ๋น๋๊ธฐ ํจ์ ์์ ์ธ์งํ์ง ๋ชปํ ์๋ชป๋ ์ฝ๋
let result = await students.map(async(v,i)=>{
const account=await Account.findOne({'studentId':v._id})
return {'name':v.userId.name,'email':v.userId.email,
'alias':v.alias,'job':v.jobId,'balance':account.currentBalance}
})
console.log(result) // pending ๋ฐํ
1.2) map์ ๋น๋๊ธฐ ํจ์์ด๋ฏ๋ก(์ฝ๋ฐฑ๋ฐํ) ๋ด๋ถ ํจ์๊ฐ ๋๋๊ธฐ์ ์ map์ด ๋๋๋ฒ๋ฆฐ๋ค. ๊ทธ๋์ pending์ด ๋ฆฌํด๋๋ค.
(2)
//์ฌ๋๋ก ๋ ์ฝ๋
let result = await Promise.all(
students.map(async (v, i) => {
const account = await Account.findOne({ 'studentId': v._id })
return {
'name': v.userId.name, 'email': v.userId.email,
'alias': v.alias, 'job': v.jobId, 'balance': account.currentBalance
}
})
)
๋ชจ๋ map ์ ๋น๋๊ธฐ ์ฝ๋ฐฑ ํจ์๋ค์ด ๋๋ ๋๊น์ง(fulfiled) ๊ธฐ๋ค๋ฆฐ ๋ค์์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ result์ ์ ๋ฌํ๋๋ก ํ๋ค.
•ํจ์ ๋ด๋ถ์ ๋น๋๊ธฐ๋ก ๋์ํ๋ ์ฝ๋๊ฐ ์๋ฃ๋์ง ์์๋ค ํด๋ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฆ์ ์ข ๋ฃํ๋ค. ๋ฐ๋ผ์ ๋น๋๊ธฐ ํจ์ ๋ด๋ถ์ ๋น๋๊ธฐ๋ก ๋์ํ๋ ์ฝ๋์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ธ๋ถ๋ก ๋ฐํํ๊ฑฐ๋ ์์ ์ค์ฝํ์ ๋ณ์์ ํ ๋นํ๋ฉด ๊ธฐ๋ํ ๋๋ก ๋์ํ์ง ์๋๋ค.

https://eundms.tistory.com/238