저는 표현형 프레임 워크에서 다소 새로운 것 같습니다. Flickr API를 호출하여 앨범 목록을 가져오고 각 앨범에 대해 미리보기 이미지를 가져와야합니다. 마지막으로 {title, thumb}
과 같은 객체 목록을 사용하여 covers
배열을 작성해야합니다. 나는 완벽하게 만들어진 covers
배열을 템플릿에 전달하고 렌더링하고 싶습니다. node.js 콜백이 작동하는 방식으로 인해 문제가 발생했으며 루프의 경우 은 요청이 끝나기 전에 빨리 종료됩니다. 어떻게 제대로 할 수 있을까요? async
하고 @sgwilly 말했다 request
하지만, 뭔가를 잘못 사용하여비동기식 요청의 순서를 조합하여 최종 답을 만듭니다.
http.get(base_url+'&user_id='+flickr.user_id+'&method=flickr.photosets.getList', function(resp){
var body = '';
resp.on('data', function(chunk) {
body += chunk;
});
resp.on('end', function() {
var json = JSON.parse(body);
var ps = json.photosets.photoset;
// final answer
var covers = {};
for(var i=0; i<ps.length; i++) {
var p = ps[i];
var getSizesUrl = base_url+'&user_id='+flickr.user_id+'&method=flickr.photos.getSizes&photo_id='+p.primary;
http.get(getSizesUrl, function(resp){
var body1 = '';
resp.on('data', function(chunk) {
body1 += chunk;
});
resp.on('end', function() {
var json1 = JSON.parse(body1);
covers += {title: p.title._content, thumb: json1.sizes.size[1].source};
if(i + 1 == ps.length) {
// last call
console.log(covers);
res.render('photosets', {covers: covers});
}
});
});
}
});
});
업데이트 ...
request(base_url+'&user_id='+flickr.user_id+'&method=flickr.photosets.getList', function (error, response, body) {
var json = JSON.parse(body);
var ps = json.photosets.photoset;
// functions list to call by `async`
var funcs = {};
for(var i = 0; i < ps.length; i++) {
var p = ps[i];
funcs += function(callback) {
request(base_url+'&user_id='+flickr.user_id+'&method=flickr.photos.getSizes&photo_id='+p.primary, function (error, response, body1){
var json1 = JSON.parse(body1);
var cover = {title: p.title._content, thumb: json1.sizes.size[1].source};
callback(null, cover);
});
};
}
// run requests and produce covers
async.series(funcs,
function(covers){
console.log(covers);
res.render('photosets', {covers: covers});
}
);
});
당신이 [요청]를 사용하여 시도 되세요 (https://npmjs.org/package/request)하고있어 [비동기] (https://npmjs.org/package/async) 모듈? 그들은 당신을 위해 무거운 짐을 질 수 있습니다. – warchimede