Сохранить массив изображений на сервер node

310
04 октября 2017, 11:10

Имеется массив с информацией о группах вк. В том числе и изображения. Суть заключается в необходимости поочередно записать их на сервер для дальнейшего отображения. Понятное дело нужны промисы, но я не до конца улавливаю их суть. Ниже привожу участок кода

var saveImg = function(url) { 
  return new Promise(function(resolve, reject) { 
 
    request.get({ 
      url: url, 
      encoding: 'binary' 
    }, function(err, response, body) { 
 
      fs.writeFile('test.jpg', body, 'binary', function(err) { 
        if (err) { 
          reject(err) 
        } 
        resolve(); 
      }); 
    }); 
 
  }); 
}; 
 
request(urlRender.reqVk("groups.get", user, token, "&filter=admin&extended=1"), function(error, response, body) { 
  var groupJSON = JSON.parse(body); 
 
  var groups = groupJSON['response']['items']; 
  console.log("groups", groups[0]); 
 
  for (var i = 0; i <= groups.length - 1; i++) { 
 
    saveImg(groups[i]['photo_200']).then(function() { 
        console.log("Img is on server"); 
      }) 
      .catch(function(err) { 
        console.log("something wrong with saving img", err); 
      }); 
  } 
}); 
 
if (err) { 
  console.log(err) 
} 
 
});

При этом коде записывает или 6 или 8 изображение. Я так понимаю, здесь нужен promise.all, но не догоняю, как реализовать. Помогите плез

Answer 1

Решение

var saveImg = function(url, i) { 
  return new Promise(function(resolve, reject) { 
 
    request.get({ 
      url: url, 
      encoding: 'binary' 
    }, function(err, response, body) { 
 
      fs.writeFile('test' + i + '.jpg', body, 'binary', function(err) { 
        if (err) { 
          reject(err) 
        } 
        resolve(); 
      }); 
    }); 
 
  }); 
}; 
 
request(urlRender.reqVk("groups.get", user, token, "&filter=admin&extended=1"), function(error, response, body) { 
  var groupJSON = JSON.parse(body); 
 
  var groups = groupJSON['response']['items']; 
  console.log("groups", groups[0]); 
 
  for (var i = 0; i <= groups.length - 1; i++) { 
 
    saveImg(groups[i]['photo_200'], i).then(function() { 
        console.log("Img is on server"); 
      }) 
      .catch(function(err) { 
        console.log("something wrong with saving img", err); 
      }); 
 
    console.log(i + " group name: ", groups[i]['name']); 
 
  } 
 
 
}); 
 
if (err) { 
  console.log(err) 
} 
 
});

READ ALSO
Как зафиксировать курсор мыши?

Как зафиксировать курсор мыши?

Всем доброго дняЕсть абсолютно спозиционированный элемент, который по mouse up получает данные pageX и записывает их в свойство left, тем самым перемещая...

422
Не корректная работа модальных окон

Не корректная работа модальных окон

Нужна помощь, не отображаются модальные окнаНужно открыть модальное окно, это работает

357