Задать вопрос
@nezzard

Как вывести переменные из функции async.eachSeries?

Добрый день, есть 2 цикла с запросами, которые формируют 2 массива, я вывожу их в два разных коллбека, но мне нужно их обьединить в один после успешной обработки одного и другого, но никак не получается вывести

async.eachSeries(result, function(item, callback2) {
		  request.get("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist="+encodeURIComponent(item['artist'])+"&api_key=xxxx&format=json", function(err, res, body)
		  {
		    if(res.statusCode == 200 ) {     
			    if(JSON.parse(body)['artist'] !== undefined) {
			    	temp2.push({name: count2, number: JSON.parse(body)['artist']['image'][2]['#text']});		       
			  	} 
			  	else {
			    	temp2.push({name: count2, number: false});
			  	}
		 			callback2();
		 			count2++;
		  	}
	 			else {
		      callback2('Error');
		    }
		        
		  });    
		}, 
		function(err) {
		  if( err ) {
		    console.log('Ошибка случилась');
		  } else {
		    console.log('Все хорошо едем дальше');
		    console.log(temp2);
		  }
		});


И есть такое же, только для ютуба, нужно в итоге вывести два массива из двух циклов, чтобы сформировать 1 массив, подскажите пожалуйста в каком направлении двигаться
  • Вопрос задан
  • 214 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Aves
В направлении Promise.all
Например как-то так.
Ответ написан
Комментировать
@antonecma
Nodejs backender
Вы все таки выбрали async. Это будет выглядеть ужасно, но можно использовать caolan.github.io/async/docs.html#parallel. Заснуть два этих eachSeries в parallel, а там где выводится 'едем дальше' вызывать parallel'евский callbak с вашим массивом. В конце, когда отработает parallel, он будет содержать оба ваших массива.
Написано ужасно, а в коде будет выглядеть ещё хуже. Категорически не рекомендую вам пользоваться этим древним пятилетней давности подходом. На дворе 2017 год, пора набраться смелости и вызубрить Promise и другие плюшки современного javascript. Благо тут помогут советом.
Ответ написан
@nezzard Автор вопроса
Вот так написал, в общем этот скрипт если выполняется с if то mysql падает моментально
result.forEach(function(item){
	wp.song().search( item['artist']+' - '+item['song'] ).then(function( posts ) {
		if(!posts[0]){

			var myRequests = [];
			myRequests.push(rp({uri: "http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist="+encodeURIComponent(item['artist'])+"&api_key=*****&format=json", json: true}));
			myRequests.push(rp({uri: "https://www.googleapis.com/youtube/v3/search?part=snippet&order=viewCount&q="+encodeURIComponent(item['artist']+'+'+item['song'])+"&type=video&key=***", json: true}));
			Promise.all(myRequests)
			  .then((arrayOfHtml) => {
			  	console.log(arrayOfHtml[0]['artist']['image'][2]['#text']);
			    console.log(arrayOfHtml[1]['items'][0]['id'].videoId);


					wp.posts().create({
					    title: item['artist']+' - '+item['song'],
					    content: 'Your post content',
					    status: 'publish'
					}).then(function( response ) {
					    console.log( response.id );
					})

			    
			  })
			  .catch(/* handle error */);


		}
	});
})`
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы