NodeJs - typescript 에서 async/await 에 대한 문제 정리 - Promise
아!! 짜증난다!!!
요 몇일 집에서 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의 세계는 참 어렵다. 개념부터 다르니.
왜 이글을 적냐면...
그냥 적어두는 과정을 거치면, 더 잘 기억할 것 같아서 적어둔다. ㅋ.
그럼 안녕. ㅋ.