반응형
JavaScript Promise 객체의 값을 가져오는 방법 !
let admin_check = areYouAdmin(userid)
console.log(admin_check) ---> 요 부분이 안나왔다.
async function areYouAdmin(userid){
let user_level = await users.findOne({where:{userid,}})
console.log(user_level.dataValues.admin) -> 요기는 잘 뜨고
return user_level.dataValues.admin;
}
채팅 구현 중 Promise 의 값을 외부로 가져오면 계속 Pending으로만 떴다.
areYouAdmin 이라는 함수에서 해당 userid가 관리자인지 아닌지 판별하고 싶었는데 계속 아래처럼
Promise { <pending> }
이렇게만 뜨는 것이었다. ㅠㅠ 엄청 오래 찾다가 .then도 써보고 하다가
areYouAdmin(userid)
.then(v=>{
console.log(v) ->값이 나옴 !
})
이렇게 then을 쓰면 안의 값을 쓸 수 있지만 꼭 then의 { } 안에서만 사용해야 한다. -> 밖에서 쓸 수 있는걸 고민하다가
찾은 방법 ! await으로 해당 값 가져오기 !
let admin_check = await areYouAdmin(userid)
async function areYouAdmin(userid){
let user_level = await users.findOne({where:{userid,}})
console.log(user_level.dataValues.admin)
return user_level.dataValues.admin;
}
요렇게 await 를 붙이니까 값 0이 잘 나왔다. !!!
즉, 아래 함수의 return 되는 a의 값은 promise 객체로 반환되고 이를 꺼내는 방법은
async function A(){
let a = await users.findOne() ~
return a
}
1. then ( 하지만 then{} 안에서만 해당 값 사용 가능
2. 또 다른 async await으로 해당 값 가져오기 !
실 예제
let id; // 전역변수 선언
let socket_array = [];
let admin_array = [];
io.sockets.on('connection', (socket) => {
let cookies = socket.handshake.headers.cookie;
if (cookies != undefined) {
let cookieArr = cookies.split(';');
cookieArr.forEach(async v => {
let [key, value] = v.trim().split('=');
if (key == 'AccessToken') {
let payload = value.split('.')[1];
let { userid, exp } = JSON.parse(Buffer.from(payload, 'base64').toString());
id = userid
// admin_check => 관리자이면 return 0 아니면 NULL
let admin_check = await areYouAdmin(userid)
if (admin_check==0){
admin_array.push(socket.id); console.log('is admin');
} else {
socket_array.push(socket.id); console.log('is user');
let data = {socketID:socket.id, userid,}
if (admin_array.length > 0){
admin_array.forEach(v =>{
socket.to(v).emit('send',data)
})
}
반응형
'Javascript' 카테고리의 다른 글
[JavaScript] 핸드폰번호, 생년월일 - 하이픈 자동 삽입하기 / Backspace keyCode (0) | 2021.06.28 |
---|---|
[JavaScript] 이메일, 핸드폰 번호, 생년월일 유효성 검사 (정규식) (0) | 2021.06.28 |
[JavaScript] 팝업창 띄우는 두 가지 방법 (0) | 2021.06.23 |
[JavaScript] node.js 회원가입시 이메일 인증하여 로그인 하기 구현 (0) | 2021.06.21 |
[JavaScript] Node.js Google API 구글 지도 맵 가져오기 (0) | 2021.06.21 |