У меня есть набор мест, для которых я делал поисковые звонки в Google поблизости, чтобы найти несколько квартир. Я хочу объединить результаты всех этих звонков и сохранить их.

Я делал это, используя async.map. Если произошла ошибка, то я хочу, чтобы по крайней мере результаты всех успешных вызовов были хотя бы консолидированы. Но этого не происходило, поскольку первый результат встречает async.map, он переходит в раздел ошибок, и нет никакого способа получить результаты успешные.

Итак, после небольшого поиска наткнулся на async.reflect, который заставляет каждый асинхронный вызов отправлять результат или ошибку. Это помогает, так как async.map не получит ошибку, но ошибка является частью возвращаемого объекта. Затем мы можем обработать все наборы результатов и сохранить или выполнить с ними любую дальнейшую обработку.

async.map(result, async.reflect(function (x, callback) {
 googleMapsClient.placesNearby(query, function (err, response) {
   //send the results when they are received.
   callback (response.json.results);
 });
}), function (err, results) {
results.forEach(function (eachResult, i) {
 if (eachResult.error) {
  console.log("handle error " + eachResult.error);
 } else {
  if (eachResult.value) {
   for(let o of eachResult.value)
   {
    finalResult.add(o);
   }}
  }
 });
);