2016-06-28 3 views
0

이 질문은 다소 모호 할 수 있지만 설명하기 위해 최선을 다할 것입니다.API에서 비동기 결과를 순차적으로 처리하는 방법은 무엇입니까?

Twitter의 API에서 검색 할 수있는 모든 트윗의 배열을 만들려고하지만 각 요청을 200 개의 트윗으로 제한합니다. 트위터에 최대 3200 개의 트윗을 비동기 적으로 요청할 수 있습니까? 내 말은, 비동기 적으로 Twitter의 API를 호출 할 수 있지만 배열을 순차적으로 작성하여 트윗이 날짜와 관련하여 올바르게 정렬되는지 확인하는 것입니다.

그래서 나는 배열을 가지고 :

var results = []; 

내가 노드의 요청 모듈을 사용하고 있습니다 :

var request = require('request'); 

제가 (200 만 한도) 지금이입니다
request(options, function(err, response, body) { 
    body = JSON.parse(body); 
    for (var i = 0; i < body.length; i++) { 
     results.push(body[i].text); 
    } 
    return res.json(results); 
}); 

'promise'모듈을 사용했을 수도 있지만 이해하기가 어려웠습니다. while 루프를 사용해 보았지만 서버가 사용하고있는 경로를 따라갈 수 없어 복잡해졌습니다.

잘 설명하지 못했다면 알려주세요.

결국 결과는 요청이 보내는 모든 트윗으로 채워진 배열이되고 싶습니다.

답변

1

request 대신 request-promise을 사용하는 것이 좋습니다. 여기 내 해결책이있다.

var rp = require('request-promise'); 
var tweets = []; 
var promises = []; 
for (var i =1; i< 10; i++){ 
    var promise = rp(options); 
    promises.push(promise); 
} 
Promise.all(promises).then(function(data){ 
    data.forEach(function(item){ 
    // handle tweets here 
    }); 
    return res.json(tweets); 
}); 
+0

모든 데이터를 처리하기 전에 요청에서 일부 데이터에 액세스해야합니다 ... 어떻게해야합니까? 약속 내용에 "엿보기"와 비슷합니까? –

관련 문제