함수 외부에서 선언된 두개의 변수 중 하나는 함수를 거치고 제대로 바뀐뒤 함수밖에서 로그도 잘 찍히는데
한 변수는 함수 내부에서 로그를 찍어봤을땐 잘 나오는데 함수 밖에선 미리 선언된 빈 배열이 나옵니다.
async await와 관련된 문제일거로 예상됩니다만 찾아봐도 답이 잘 나오지 않습니다..
router.get('/suggest', authMiddleware, async (req, res) => {
const { mbti } = res.locals.user; // 로그인한 유저의 mbti
let user = []; // 전역 변수 선언
let lookingFor = [];
async function suggest(...args) {
for (let i = 0; i < args.length; i++) {
lookingFor.push({ mbti: args[i] });
}
user = await User.find({
$or: lookingFor,
});
console.log('함수내부', lookingFor);
console.log('함수내부', user);
return user;
}
switch (mbti) {
case 'ESFJ':
suggest('ISFP', 'ISTP');
// user = await User.find({
// $or: [{ mbti: 'ISFP' }, { mbti: 'ISTP' }],
// });
break;
}
console.log('함수외부', lookingFor);
console.log('함수외부', user);
콘솔결과: 함수외부 [ { mbti: 'ISFP' }, { mbti: 'ISTP' } ]
함수외부 []
함수내부 [ { mbti: 'ISFP' }, { mbti: 'ISTP' } ]
함수내부 [유저정보 잘 담겨있음.]