일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 딕셔너리
- 이코테
- Hackathon
- 우아한테크코스
- makeus
- 이것이취업을위한코딩테스트다
- loop
- 나동빈
- CMC
- forloop
- HashCode
- 해커톤
- ssh-action
- CICD
- 동빈북
- 왕실의나이트
- 동등성
- 라이징캠프
- remove
- JWT
- nestJS
- equlas
- 우테코
- 너디너리
- github action
- Payload
- Signature
- object
- 컴공선배
- 동일성
Archives
- Today
- Total
작지만 꾸준한 반복
[Javascript] forEach는 async를 안기다려준다 본문
요즘은 로컬에 데이터베이스를 설치하지 않고 도커로 DB를 띄워서 사용하고 있다
aquerytool이나 quickDBD 같은 온라인 사이트를 이용하여 DB를 설계한 후 추출한 DB 생성 쿼리를 저장해두고
javascript에서 해당 생성쿼리가 있는 파일을 읽어와서 실행시키는 방식으로 사용하고있다
가뜩이나 AWS 프리티어 요금도 끝나서 막막했는데 아주 쏠쏠하다
문제 코드는 다음과 같다
const fs = require('fs')
const serviceDB = require('adapters/servicedb')
const init = async () => {
try {
const fileSQL = await fs.readFileSync('src/adapters/servicedb/init.sql', { encoding: 'utf8' })
fileSQL.split(';').forEach((sql) => {
if (sql.indexOf('CREATE') !== -1) {
serviceDB.connection.execute(sql, (err) => {
if(err) {
throw err
}
})
}
})
} catch(e) {
console.error(e)
}
}
init()
DB 생성 쿼리가 먹다가 멈추는 현상이 자꾸 일어났다..
해결하려고 이것저것 찾다가 전통적인 for문을 사용해보니 문제가 해결됐고,
내린 결론은 forEach로 비동기 함수를 돌린 것이 화근이었다.
그리고 forEach 함수는 async를 기다려주지 않는다는 사실을 알게 되었다
먼저 저 상황은 다음과 같이 변경하여 해결하였다
const fs = require('fs')
const serviceDB = require('adapters/servicedb')
const init = async () => {
try {
const fileSQL = await fs.readFileSync('src/adapters/servicedb/init.sql', { encoding: 'utf8' })
const splits = fileSQL.split(';')
for (let i = 0; i < splits.length; i += 1) {
const sql = splits[i]
if (sql.indexOf('CREATE') !== -1) {
await serviceDB.connection.promise().execute(sql)
}
}
} catch(e) {
console.error(e)
}
}
init()
앞으로 또 마주할지 모르는 나를 위해 정리해둔다
한줄 요약
javascript forEach는 비동기함수 안기다려줌
두줄 요약
javascript forEach는 비동기함수 안기다려줌
for나 for.. of 를 사용하여 해결할 수 있다
레퍼런스
https://constructionsite.tistory.com/43
'트러블슈팅' 카테고리의 다른 글
Lombok is- 필드 직렬화 버그 트러블슈팅 (0) | 2024.02.09 |
---|---|
Java optional - OrElse, OrElseGet 알고쓰자 (0) | 2023.08.20 |
[python] for loop list remove() 사용 주의점 (0) | 2022.07.17 |
[ORACLE 19C] ORA-01017: 사용자명/비밀번호가 부적합, 로그온 할 수 없습니다. (0) | 2022.04.04 |