Node.js 콜백 함수 값 리턴

안녕하세요.

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로 선언하여 외부에서 받아 쓰는 거죠! digda 2018.10.11 11:23
    • 물론... 예외가 있을 수 있어요. 만약 request 모듈이 native promise를 리턴하지 않고 에뮬레이션된 자체구현 promise를 리턴하는 버전이라면 위 코드는 동작하지 않습니다. digda 2018.10.11 11:25

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.