자바스크립트 비동기 함수 질문
조회수 3280회
현재 자바스크립트로 웹 코딩을 하고있는중 고난을 겪고 있습니다.
함수를 사용하고 있는데 그 함수에서는 외부의 api를 받아오는데요.
예를들어 코드를
func a(id){
return API(id);
}
라고 해봅시다.
이때 func가 리턴을 제대로된 값을 하지않고 'undefined'을 리턴하는데요.
직접 alert()로 디버깅 하여보면 API의 결과는 잘 출력이 됩니다.
그런데 알아낸게 있는데 리턴값과 API을 둘다 alert하면 API가 먼저출력이 되는게 아니라 return 이 먼저 출력이 되어 'undefined'가 되는것 같습니다.
아마 API를 받아오는 속도가 느리고 비동기로 적용이 되어서 그런듯 한데 이러한 비동기형 상황을 동기형 함수로 어떻게 바꾸는지가 궁금합니다.
아니면 비동기, 동기문제가 아니면 어캐 해결하는지 알고싶습니다.
2 답변
-
javascript로 웹프로그래밍을 하신다니 nodejs를 사용하시는 것 같은데 nodejs는 IO처리를 할 때 비동기식으로 동작하기 때문에 함수 호출 시 바로 리턴되는 것입니다. 비동기 함수를 호출하실 때에는 callback 함수를 사용하여 이벤트 처리를 합니다. 아마
API
함수도 callback 함수를 인자로 받아서 호출이 끝나면 처리할 수 있게 되어 있을 것입니다. 따라서 다음과 같이 처리하시면 될 것 같습니다.func a(id, cb) { API(id, cb); }
참고로
cb
는 callback 함수입니다. 그리고, 다음 글을 참고하시면 비동기 프로그래밍을 이해하는데 도움이 되실 것 같습니다.-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
API가 callback을 지원하지 않나요?
아래 코드는 AWS S3관련 질문에서 가져온건데요. 아마존 웹서비스에 데이터를 올리는 API입니다.
var s3 = new AWS.S3(); var params = { //...중략 }; s3.putObject(params, function(err, data) { //err가 발생하면 err를 알려주고 성공하면 data를 던져주는 callback function });
사용하시는 API에서 이런 형태로 callback function을 지원하는지 한 번 보시겠어요?
댓글 입력