2016-09-16 6 views
2

내 요구 사항은 여러 REST 리소스에서 JSON 데이터를로드해야한다는 것입니다. 이를 위해 여러 번 요청을해야합니다. 모든 요청이 완료되면 일부 기능을 수행해야합니다.request-json이 노드 j에서 async로 제대로 실행되지 않는 복수 get 요청

다음은 내 코드입니다 :

var asyncTasks = []; 
//These URLs are dynamic and can increase or decrease 
var urls = ["resource1", "resource2", "resource3"]; 
var client = request.createClient("domainurl"); 

urls.forEach(function (item) { 
    asyncTasks.push(function() { 
     client.get(item, function (err, res, body) { 
      dataLoaded(err, res, body) 
     }); 
    }); 
}); 

async.parallel(asyncTasks, function() { 
    // All tasks are done now 
    allDataLoaded(); 
}); 

function dataLoaded(err, res, body) { 
console.log('Data Loaded'); 
}; 

function allDataLoaded() { 
console.log("All data loaded"); 
} 

내가 직면하고 문제가 dataLoaded 기능이 제대로 호출되고 있지만 allDataLoaded 기능이 호출되지 것입니다.

저는 이것을 위해 request-json과 async npm 패키지를 사용하고 있습니다. 시간 내 주셔서 감사합니다. 다른 정보가 필요하면 알려 주시기 바랍니다.

+0

[약속]이라고 표시된 이유는 무엇입니까? – Bergi

+0

그것은 제거되었습니다. 지적 해 주셔서 고마워요. 건배 –

답변

4

async.parallel은 호출해야하는 모든 작업에 콜백을 전달합니다. 그렇지 않으면 작업 완료 시점을 알 수 없습니다. 사용

var asyncTasks = urls.map(function (item) { 
    return function (cb) { 
//     ^^ 
     client.get(item, function (err, res, body) { 
      dataLoaded(err, res, body) 
      cb(err); 
//   ^^^^^^^ 
     }); 
    }; 
}); 

다음 async.parallel(asyncTasks, allDataLoaded) 사용할 수 있습니다.