아!! 짜증난다!!!
요 몇일 집에서 OpenCV와 nodejs(typescript)를 이용해서 이것저것 해 보고 있다. 근데... 분명 어제 만들었던 코드가 오늘은 안 돌아 갔다. 그래서 typescript로 만들어 두었던, class와 호출되는 함수를 모두 풀어서 1개의 함수로 작성했더니 잘 된다... -_-
아아! 도대체 뭐가 문제일까?
뭐가 문제일까?
1개의 함수로 풀어 두었던 코드들과 기존의 코드를 비교 했지만, 알 수 없는 이 문제... 도대체 뭐가 문제일까? 결과적으로 문제는 async와 await를 잘못 사용한 것이었다.
문제 해결
내가 만든 코드는 아래와 같다.
////////// 함수 정의
public init():void {
//...
}
public async captureDetectFace(dir:string, maxCounter:number):Promise<FaceAddResult> {
//...
}
public destroy():void {
//...
}
/////////// 함수 호출
let fr:FaceRecog = new FaceRecog();
fr.init();
fr.captureDetectFace("..", 10);
fr.destory();
함수 중에 caputreDetectFace
함수는 async 함수로 만들어 두었는데, 함수를 호출 할 때는 생각도 없이 그냥 fr.captureDetectFace("..", 10)
의 형태로 호출을 했다.
그렇기 때문에, 해당 함수의 결과(Promise
)를 대기하지 않고, 바로 fr.destory()
를 호출하게 된다.
fr 인스턴스가 destory 되어버렸기 때문에, fr.captureDetectFace()
함수 안에서 fr 인스턴스를 사용하려고 할 때 문제가 되는 것이었다.
고치는 방법은 너무나 간단하다. fr.captureDetectFace("..",10)
으로 호출할게 아니라, await fr.captureDetectFace("..",10)
처럼 await
를 붙여 주면 해결 되는 문제 였다.
아! 멍청이!
기껏 코드를 다 작성하고, 문제를 찾지 못하고 있었는데... 참... javascript의 세계는 참 어렵다. 개념부터 다르니.
왜 이글을 적냐면...
그냥 적어두는 과정을 거치면, 더 잘 기억할 것 같아서 적어둔다. ㅋ.
그럼 안녕. ㅋ.
'공부 > 컴퓨터' 카테고리의 다른 글
[Java] 자바코딩, 이럴 땐 이렇게 - 메소드 체인 형태의 호출에서의 bytecode동작과 메모리 반환 관계 (4) | 2019.01.08 |
---|---|
일래스틱 스택 6 입문(Learning Elastic Stack 6.0) - 일래스틱서치, 로그스태시, 키바나, 엑스팩 활용 가이드 (0) | 2018.11.27 |
Do It! Vue.js 입문 - 예제로 이해하고 실전 프로젝트로 완성한다. (0) | 2018.07.29 |
Vue.js 가이드 문서 - 2018년 7월 23일 기준 (0) | 2018.07.24 |
Do it! Node.js 프로그래밍 - 실제 서버로 구동 가능한 코드로 배운다. (0) | 2018.07.17 |