Node.js 콜백 함수 값 리턴

조회수 2667회

안녕하세요.

Node.js를 이용하여 개발을 진행 하고 있습니다.

그런데, 생각보다 간단한? 문제에 봉착하여 이렇게 질문을 남기게 되었습니다.

코드는 대략 다음과 같습니다.

제가 원하는 것은 sms 함수를 호출하면, request 라는 함수가 한번 더 호출되는데,

여기에서 인자로 받고 있는 body 라는 값을 return 하고 싶습니다.

제가 직접 시도 해보았지만, undefined가 뜨고 맙니다.

어떻게 해결 할 수 있을까요?

구글링을 조금 해보니, 함수를 인자로 넘겨라 거기서 로직을 작성해라 는 답변이 있는 것 같은데,

해당 답변처럼 시도해보았으나, 값을 리턴하지는 못했습니다.

이러한 이슈를 어떻게 해결 할 수 있을까요?

const response = await sms(content, body.tel);
function sms(content, recipient){
    const options = {
        url: 'https://api-sms.cloud.toast.com/sms/v2.1/appKeys/key/sender/sms',
        method: 'POST',
        headers: headers,
        body: JSON.stringify(data)
    };

    request(options).then((body) => {
        console.log(body);
    }).catch((err) => {
        console.log(err);
    });
}
  • await sms(content, body.tel) 을 await sms(content, body)로 바꾸면요? 엽토군 2018.10.4 09:06
  • 안녕하세요. 엽토군님. 해당 값과는 별개라서요 ^^; 김운아 2018.10.5 00:36

2 답변

  • url을 타고 들어가봤는데

    <StandardResponse>
    <header>
    <isSuccessful>false</isSuccessful>
    <resultCode>-1000</resultCode>
    <resultMessage>Invalid appKey.</resultMessage>
    </header>
    <body/>
    </StandardResponse>
    

    바디에 내용이 없군요. 그래서 undefined가 뜨는 것같습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 안녕하세요. yangwook님. 해당 내용과는 별개적인 부분입니다. request 요청 시 키 값들이 들어가야 값을 받을 수 있는 REST API 구조 요청입니다. 김운아 2018.10.11 09:21
  • async function sms(content, recipient){
        const options = {
            url: 'https://api-sms.cloud.toast.com/sms/v2.1/appKeys/key/sender/sms',
            method: 'POST',
            headers: headers,
            body: JSON.stringify(data)
        };
    
        return await request(options);
    }
    
    • 안녕하세요? doodoji님. 답변 감사합니다. 말씀하신대로 해보겠습니다. return 다음에도 await 키워드를 사용 할 수 있군요. 김운아 2018.10.11 09:20
    • 어색해 보이면 로컬변수에 담아서 리턴하셔도 됩니다. 핵심은 'body값을 콜백에서 처리하지 않는다' 이기 때문에 sms 함수 자체도 async로 선언하여 외부에서 받아 쓰는 거죠! doodoji 2018.10.11 11:23
    • 물론... 예외가 있을 수 있어요. 만약 request 모듈이 native promise를 리턴하지 않고 에뮬레이션된 자체구현 promise를 리턴하는 버전이라면 위 코드는 동작하지 않습니다. doodoji 2018.10.11 11:25

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)