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

Как сделать синхронный цикл в Node.JS?

Привет. Я немного учусь программировать.

У меня есть некоторое количество ссылок и я хочу, чтобы скрипт по очереди скачал содержимое каждой и записал в базу. На php работало простым циклом, тут не выходит. Я сделал так. Но интересно узнать у опытных разработчиков, как бы вы сделали.

var adresses = []; // ten values
connection.connect(); // mysql connection

function get(address, callback) {
	http.get(address, function(res) {
		var getted;
		res.on('data', function(part) {
			getted += part.toString();
		}).on('end', function() {
			callback(getted);
		});
	});
}

function getPages(counter) {
	get(adresses[counter], function(res) {
		connection.query('INSERT INTO porn (id, link) VALUES ('+(counter+1)+', '+res+')', function(error, result) {
			if (counter < adresses.length) {
				getPages(counter+1); // continue
			} else {
				connection.end(); // mysql close
			}
		});
	});
}

getPages(0);


Ниже код, который я написал специально для примера. Что-то примерно такое же работает в моём скрипте.
  • Вопрос задан
  • 2200 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@nukkumatti
В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом.
You're Doing Node.js Wrong! Avoid Synchronous Code

Теперь решения и примеры (не только о том, как сделать синхронный цикл)

ES6 Promises
https://github.com/lukehoban/es6features#promises
venkateshcm.com/2014/04/Reactor-Pattern-Part-3-Pro...
tiku.io/questions/2881748/nodejs-synchronous-for-e... (первый ответ)

Node fibers
https://github.com/laverdet/node-fibers
venkateshcm.com/2014/04/Reactor-Pattern-Part-4-Wri...
Abstraction for node fibers для изучения исходников
https://github.com/ybogdanov/node-sync
https://github.com/jtblin/syncho

ES6 Generators
https://github.com/lukehoban/es6features#generators
https://github.com/luciotato/waitfor-ES6

Threads и Fibers
Generators vs Fibers
ES6 generators или promises

Интересные и полезные материалы, надеюсь
Understanding event loop in eng и по ру
Child process synchronous process и shell scripts usage
Count-down closure
synchronize.js
loop.iteration
FuturesJS (e.g. Sequence)

Мне стоит вникать в такие вещи вот и думал, что кто-то напишет лучший аналог кода и скинет что почитать на эту тему.

Пока достаточно почитать?
Do not hesitate to contact me, когда снова наступит информационный голод

Avoid Synchronous Code <3
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
smanioso
@smanioso
Отмечайте ответы на свои вопросы!
Ваш ответ на вопрос

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

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