저는 Node.js를 처음 접했고 그 수명에 따라 전체 콜백 비동기 문제를 파악할 수 없습니다.nodejs의 배열에 비동기 결과 추가
내가 원하는 것은 "비교적"간단하다. 모든 호출을 차단하면된다.
1) 목록
2) 새로운 요소와의 새로운리스트를 새로운 요소를 생성
3) 요소를 반복 요청 속성 다른 요청
4) 신규 추가의 결과 인 새 목록에 요소
세부 사항 :
var originalList = [{
provider: "ABC",
loc: [13.37224, 52.53862],
state: 22
}, {
provider: "CDE",
loc: [13.37124, 52.53262],
state: 33
}, {
provider: "EFG",
loc: [13.37214, 52.53662],
state: 44
}];
var newElement;
var newList = [];
var vLat, vLng;
originalList.forEach(function(element, index, array) {
newElement = {
provider: element.provider,
state: element.state
};
vLat = element.loc[1];
vLng = element.loc[0];
async.parallel([
function(callback) {
var location;
googleMapsClient.reverseGeocode({
latlng: [vLat, vLng],
result_type: ['street_address'],
location_type: ['ROOFTOP', 'APPROXIMATE']
}, function(err, response) {
if (!err) {
var result = response.json.results;
location = result[0].formatted_address;
newElement.location = location;
callback();
} else {
callback(err);
}
});
}
], function(err) {
if (err) console.log(err);
newList.push(newElement);
});
});
Google Maps 요청을하는 두 번째 비동기 함수를 생략하고 그 결과를 newElement에도 추가해야합니다.
저는 newElement가 새로운 속성 (newElement.location)을 얻지 못하는 이유를 정말로 고민하고 있습니다. 나는 그것이 기본이 될 것을 안다.
해야합니다 같은 코드가 있어야한다고 생각합니다 여기에 여분의'}'배열의 모든 객체 뒤에 – brk
당신은 originalList 배열을 의미합니까? 그냥 이상한 서식을 – Rafael
'async.map()'을 사용하고 당신은 iterator에서 최종 콜백에 물건을 전달할 수 있습니다 – Plato