2012-11-03 4 views
1
request = require('request') 

auth = 
url: '' 
method: 'POST' 
json: 
    credentials: 
    username: "" 
    key: "" 

exports = exports ? this 

request auth, (err, res, body) -> 
    exports.inside = body 

console.log(exports.inside) 


커피 스크립트 그러면 상기

Node.js. 요청 모듈 커피 스크립트 인 요청 함수 내부의 데이터를 가져 오는 방법을 알아낼 수 없습니다. 이것은 내 응용 프로그램의 주요 도로 블록이었습니다.

감사합니다.

** 수정 ** 코드

바딤 Baryshev의 업데이트가 해냈어! 정말 고맙습니다 :) !

답변

1

exports.insiderequest 함수 콜백에 지정되기 전에 출력하려고합니다. request 함수가 비동기이기 때문에. 콜백이나 이벤트를 통해이 함수의 결과를 얻을 수 있습니다.

업데이트 : 요청 기능이 완료되면

request = require('request') 

exports = exports ? this 

getAuth = (callback) -> 
    auth = 
    url: '' 
    method: 'POST' 
    json: 
    credentials: 
     username: "" 
     key: "" 

    request auth, (err, res, body) -> 
    exports.inside = body 
    callback err, body 

getAuth (err, body) -> 
    # here is exports.inside ready 
    console.log exports.inside 
    # also you can access body and request error arguments here 
    # body === exports.inside here 
    # err is request error (is null/undifined if request is successful) 
+0

예를 들어 이해할 수 있습니다. 나는 JS/CS에 매우 익숙하다. –

+0

위의 예제를 사용하여 콜백을 시도하면서 벽에 머리를 때리고 있습니다. 비동기가 쉽지 않습니다. 모든 도움이 크게 받아 들여지고 환영 받는다. :) –

+0

나는 여전히이 문제로 싸우고 CoffeeScript/Request 콜백을 작동 시키려고합니다. 모든 도움이 훌륭합니다. :) –

0

는, 당신이 신뢰성의 값에 액세스 할 수있는 유일한 장소입니다 콜백 트리거 "몸을."

문제는 console.log 기능이 실행될 때 요청이 완료되지 않았기 때문에 콜백이 실행되지 않았기 때문입니다.

비동기 프로그래밍 환경에서 프로그램 흐름을보다 자세히 설명하려면 Problems with use fs.stat in nodejs을 참조하십시오.

은 --- 편집은 --- 예제 :

이를 고려

1: path='/tmp/file.txt' 
2: result='' 
3: fs.readFile path, (err,data) -> 
4: throw err if err 
5: result=data 
6: console.log result 

이 작업을 추적 할 수 있었다 우리는 실행 순서가 1,2 될 것이라고, 우리가 발견 할 경우, 3,6, ... 4,5 여기서 디스크 i/o의 특성으로 인해 줄임표는 알 수없는 시간을 나타냅니다.

결과를 기다리는 대신 읽기 작업이 완료되기까지 어느 정도의 시간이 걸리기 때문에 파일의 내용을 읽었을 때 나중에 예측할 수없는 시점에서 호출되는 콜백 함수를 제공합니다 '결과'에 지정할 수 있습니다.

프로그램 흐름이 6 행에 도달하면 파일 읽기 작업이 완료되지 않았기 때문에 콜백이 호출되지 않았으므로 결과가 설정되지 않았습니다.

계속 진행하기 전에 작업이 완료되기를 기다리는 대신 다른 목적으로 낭비되는 시간을 사용할 수있는 비동기 프로그래밍의 특성입니다.

--- 2nd EDIT --- 귀하의 요청에 따라, 귀하의 요청에 따라 다음과 같이 수정되어 작동합니다. 지금 여러 번 설명한 바와 같이 요청이 완료 할 때 알 수 없기 때문에, 당신은 콜백의 외부 요청의 결과를 액세스 할 수 없습니다

request = require('request') 

auth = 
    url: '' 
    method: 'POST' 
    json: 
    credentials: 
    username: "" 
    key: "" 

exports = exports ? this 

request auth, (err, res, body) -> 
    exports.inside = body 
    console.log(exports.inside) 

참고.

+0

그건 의미가 있지만, 나를 위해 더 많은 물을 muddies. 좋은 예제 시간과 그들에 내 머리를 이길 ... –

+0

문제가 무엇인지 이해하지만, 내 예제와 함께 작업 솔루션을 보여줄 수있는 방법이 ..... 나는 이것으로 손실에 있습니다. 고맙습니다! –