2012-10-18 2 views
1

배열에Node.js | 배열을 통해 루프, 포스트 전화를 걸고 나는이 같은 Node.js를의 somethine에 전화를 걸 할

test = [] //initially an empty array 
list = []//an array with 10 json object 

for li in list 
    get_data url , li, (err,data) -> test.push data 

내 get_data 방법 모양 (Node.js를위한 메신저 사용하여 커피 스크립트를) 결과를 축적 같은

get_data: (url, json_data, callback) -> 
    throw "JSON obj is required" unless _.isObject(json_data) 
    post_callback = (error, response) -> 
    if error 
     callback(error) 
    else 
     callback(undefined, response) 
    return 
    request.post {url: url, json: json_data}, post_callback 
    return 

문제는이 '시험'배열 내가 for 루프에서 뭔가 잘못하고있는 중이 야 알고 있지만 확실하지에 request.post에서 결과를 수집 할 수 없습니다 나는 무엇

+0

'(ERR, 데이터) -> test' 단지 test', 당신이 기대하는 어떤 것도 –

+0

을 추가하지 않습니다'리턴'테스트 << data'할까요? –

+0

@muistooshort 아마도 그는'test.push data'라고 쓰려고했을 것입니다. 확실하지 않다. –

답변

1

요청이 모두 반환 된 경우 알 수있는 방법이없는 것으로 보입니다. 당신은 정말 a good async library 사용을 고려하지만, 여기 당신이 그것을 할 수있는 방법해야합니다

test = [] //initially an empty array 
list = []//an array with 10 json object 

on_complete = -> 
    //here, test should be full 
    console.log test 
    return 

remaining = list.length 
for li in list 
    get_data url , li, (err,data) -> 
    remaining-- 
    test.push data 
    if remaining == 0 
     on_complete() 
+0

** steps.js ** request.post에서 응답을 얻으려면 및 배열에 누적 된. 감사합니다 aaron 방향 –

0

단지 코드를 보면서 (시도하지 않고) 문제는 "응답을 받을지 여부"의 문제가 아니라 "응답을 얻을 때"의 문제인 것처럼 보입니다. for 루프를 실행 한 후에는 많은 요청을 대기열에 넣었다. 첫 번째 응답이있을 때까지 두 번째 요청에 대한 요청이 발생하지 않도록 디자인해야합니다. (또는 더 좋은 방법) 응답을 축적하는 방법이 필요하며 모든 응답이 언제 다시 반환되는지 (또는 시간이 초과되었는지) 알고 있어야합니다. 다른 콜백을 사용하여 프로그램의 주요 부분에 제어권을 반환하십시오.

BTW, here은 ActionScript 용으로 만든 다중 파일 로더를위한 코드입니다. I/O는 ActionScript에서도 비동기이기 때문에 위에서 설명한 누적 접근 방식을 구현합니다. 콜백이 아닌 이벤트를 사용하지만 CoffeeScript를 구현하는 방법에 대한 아이디어를 줄 수 있습니다.

관련 문제