Показать сообщение отдельно
  #1 (permalink)  
Старый 26.04.2015, 03:47
Аспирант
Отправить личное сообщение для FoxTrix Посмотреть профиль Найти все сообщения от FoxTrix
 
Регистрация: 27.07.2012
Сообщений: 73

Массив promise'в (vow)
Доброго времени суток.
Начал писать парсер html, столкнулся с проблемой ожидания promise'ов.
Использую vow.

Есть некий код:
var promises = [], arr = [];

var parseUrl = function (i, url) {
	promises[i] = vow.defer();
	request({uri:url,method:'GET',encoding:'binary'},
		function (err, res, body) {
			var $=cheerio.load(
				iconv.encode(
					iconv.decode(
						new Buffer(body,'binary'),
					'win1251'),
				'utf8')
			);
			arr[i] = $(some_selector).text();
			console.log(arr[i]);
			return promises[i].resolve();
		});
}

var someFunc = (function () {
	var urls = {0:'some_url'};
	
	for(i in urls) {
		parseUrl(i, urls[i]);
	}
	
	vow.all(promises).spread(function () {
		for(i in urls) {
			console.log(arr[i]);
		}
	});
})();


Собственно проблема в том, vow.all не ждёт ответа, а выводит "undefined", а потом выводится console.log с нужной информацией из функции parseUrl.

Если promises объявить как переменную, то проблема решается, но ссылок будет неопределенное кол-во, и соответственно такой вариант мне не подходит.

В документации описано только:
var defer1 = vow.defer(),
	defer2 = vow.defer();

vow.all([defer1.promise(), defer2.promise(), 3])
	.then(function(value) {
		// value is "[1, 2, 3]" here
	});

defer1.resolve(1);
defer2.resolve(2);

что мне не подходит из-за неопределенного кол-ва promise'ов.

Есть ли решение данной проблемы, или стоит присмотреться к другим promise модулям (Q/When)?

ps: io.js поставил 4 часа назад, заранее извиняюсь за возможно очевидные косяки =)

Последний раз редактировалось FoxTrix, 26.04.2015 в 03:50.
Ответить с цитированием