@AlexMark

Как делать возврат значения в async/await при forEach?

var GetImages = async() => {
	var images_array = [];
	await request ({
		url: `https://api.tumblr.com/v2/blog/nameblog/posts?api_key=${process.env.TUMBLR_KEY}&type=photo`,
		json: true
	}, (error, response, body) => {
		if(error){
			console.log('Unable to connect');
		}else if(body.meta.status === 200){
			body.response.posts.forEach(function(obj) {
				obj.photos.forEach(function(photo) {
					if(photo.original_size.width>photo.original_size.height){
						images_array.push(photo.original_size.url);
						console.log("dawdaw");
					} 
				});
			});
			//callback(images_array);
		}
	});
	 return mages_array;
}

пытаюсь получить массив картинок. Но функция сначала делает ретурн, а уж потом формирует массив картинок. Как уже не извращался, не пойму как заставить делать return после формирования массива.
Через callbak могу получить этот массив, но интересует именно правильный вариант через await/async. Благодарю за помощь.
  • Вопрос задан
  • 441 просмотр
Решения вопроса 1
forEach тут совсем ни при чем.
Хватит относиться к await - как к какой-то магической вещи которая за вас всё сделает.
Если вы не понимаете как она работает - перепишите код на промисы. К слову тут await вообще никак не поможет.
const getImages = async () =>
  new Promise((resolve, reject) =>
    request({
      url: `https://api.tumblr.com/v2/blog/nameblog/posts?api_key=${process.env.TUMBLR_KEY}&type=photo`,
      json: true,
    },
    (error, response, body) => {
      if (error) {
        reject('Unable to connect');
      } else if (body.meta.status === 200) {
        body.response.posts.forEach((obj) => {
          const photos = obj.photos
            .filter(photo =>
            photo.original_size.width > photo.original_size.height,
          ).map(photo => photo.original_size.url);
          resolve(photos);
        });
      }
    }),
  );

Переписал тот кошмар что был.
Поставьте линтер(eslint), почитайте про методы filter, map, не мешайте стрелочные и обычные функции.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы