codingeverybody / codingyahac

https://coding.yah.ac
291 stars 50 forks source link

return 값을 가져올 수 없습니다. #639

Open sowala opened 5 years ago

sowala commented 5 years ago

해결하고자 하는 문제

웹을 공부하고 있는 초보자 입니다. ^^; 함수를 만들어 결과값을 리턴받아 콘솔창에 출력하고자 하는데 undefined가 출력됩니다. 함수 안에서 확인해보면 값은 들어가 있는데 리턴시에는 값이 사라지는 건가요? 간단하게 덧셈 함수 하나 만들어서 리턴시에는 잘 전달이 되는듯 한데.. parseString 안에서 나온 결과값은 외부로 전달할 수가 없는건지... 도움 부탁드립니다.

코드 혹은 오류

  function world_list(){
  fs.readFile('./data/msg.cbl', (err, msg)=>{
    parseString(msg, (err, result) => {
      var worldList = '';
      var worldIndex = 1;
      for(var i=0; i<msg.length; i++){
          worldList += `
            <option value=${worldIndex}> [${worldIndex}] ${worldName}
          `
          worldIndex += 1;
        }
      }
      return worldList;
    })
  })
}

router.get('/', (rea, res) => {
 var list = world_list()
  console.log(list);  
  res.send('ok')
}) 

환경

사용중인 운영체제, 언어, 라이브러리의 버전을 적어주세요. nodejs

시도해본 방법

Haytsir commented 5 years ago

readFile 는 비동기함수이기 때문에 return으로 값을 받아올 수 없습니다.

readFileSync 함수를 사용하시거나,

Promise타입, async/await 같은 비동기 함수를 찾아보세요

sowala commented 5 years ago

readFile 는 비동기함수이기 때문에 return으로 값을 받아올 수 없습니다.

readFileSync 함수를 사용하시거나,

Promise타입, async/await 같은 비동기 함수를 찾아보세요

답변 너무나 감사드립니다. 알려주신 방법으로 readFileSync 함수로 변경하였으나 결과값은 여전히 undefined 로 출력되는데 parseString 함수가 비동기 함수라 리턴값을 받아올 수 없는거겠네요 해결은 못했지만 원인을 알려주셔서 감사합니다 ^^