2016-09-04 4 views
0

나는 NodeJS 기능 return 문

if (shorturl) { 
... 
    link.shorten({longUrl:"http://google.com"}, function(err, results) { 
     return results; 
    }); 
return results; 
} 

는 지금, 나는 "결과"의 값을받을 수있는 두 번째 return 문을 원하는이 있습니다. 오히려 "ReferenceError : results not defined"가 발생합니다.

반환/콜백을 중첩하도록 도와주세요.

참조 :
나는 SHORTURL

+0

'결과'의 범위는 콜백 함수에만 국한되어 있습니다. 밖에서 액세스 할 수 없습니다. – thefourtheye

+0

오류의 원인을 알고 있습니다. 밖에 접근하는 법을 알고 싶습니까? 덕분에 – crlf

답변

0

내가 두 번째 return results; 라인으로 오류가 가정에게 얻을 수있는 함수 내에서 http://github.com/nkirby/node-bitlyapi를 사용하는 것을 시도하고있다.

이것은 비동기 코드 (콜백을 사용하여 나중에 코드의 일부를 실행 함)처럼 보이므로 값을 반환하고 동일한 실행 프레임에서 사용할 수 있다고 기대할 수는 없습니다.

사례를 처리하는 가장 좋은 방법은 콜백 내부에서 나머지 코드를 실행하는 것입니다.

0

link.shorten은 비동기식이므로 콜백 기능을 제공 한 것이므로 그렇게 할 수 없습니다. link.shorten 함수에 대한 호출이 아직 반환되지 않았기 때문에 두 번째 반환 결과가 정의되지 않은 시점에서 결과가 정의되지 않습니다.

콜백을 기다렸다가 결과 만 반환하면 약속을 사용하고 결과에 대한 약속을 반환 할 수 있습니다. (노드에 대한 몇 가지 다른 약속 라이브러리가 있습니다.)

https://howtonode.org/promises

+0

. "콜백 대기"라고하면 그게 무슨 뜻입니까? 나는 첫 번째 결과에 옳은 대답을 가지고있다. 자, 어떻게 링크 범위 밖으로 이동할 수 있습니까? – crlf

+0

결과를 얻을 때 이미 두 번째 수익을 얻은 이후로는 그렇게 할 수 없습니다. 그에 따라 코드를 계획해야합니다. 콜백을 사용하여 결과를 비동기 적으로 반환하거나 결과 자체가 아닌 함수에서 약속을 반환합니다. 전화 코드를 게시하면 더 많은 도움을 줄 수 있습니다. – Nitzo

+0

나는 단축키를 얻기 위해 함수 안에 https://github.com/nkirby/node-bitlyapi를 사용하려고한다. – crlf