공부/컴퓨터

NodeJs - typescript 에서 async/await 에 대한 문제 정리 - Promise

2018. 8. 18. 00:07
반응형

아!! 짜증난다!!!

요 몇일 집에서 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의 세계는 참 어렵다. 개념부터 다르니.

왜 이글을 적냐면...

그냥 적어두는 과정을 거치면, 더 잘 기억할 것 같아서 적어둔다. ㅋ.

그럼 안녕. ㅋ.

반응형