LINUX.ORG.RU

Как вернуть значение из функции строго после прокрутки всей страницы (slimer.js)?

 , ,


0

1

Использую не фантом как в тегах, а слимер, т.к. видно что происходит.
Мне надо, чтобы значение возвращалось после всех ScrollTo, но оно возвращается намного раньше. Как правильно сделать?


page.evaluate(function() {

						 		

	function unique(arr) {
	    var obj = {};
	    for(var i=0; i<arr.length; i++) {
	        var str = arr[i];
	        obj[str] = true; 
	    }
	    return Object.keys(obj); 
	}


	function getLinks(){

		var links = new Array();

		var collect = $('div.coefficient__more > a');

		collect.each(function(index, element){
		     links.push($(element).attr('href'))
		});

		return links;

	}

	var hrefs = new Array();
	var num;
	var dl = 500;



	$(window).queue(function() {

		hrefs = hrefs.concat(getLinks());
		$(this).dequeue();

	}).scrollTo("10%").queue(function() {

		hrefs = hrefs.concat(getLinks());
		$(this).dequeue();

	}).delay(dl).scrollTo("20%").queue(function() {

		hrefs = hrefs.concat(getLinks());
		$(this).dequeue();

	}).delay(dl).scrollTo("30%").queue(function() {

		hrefs = hrefs.concat(getLinks());
		$(this).dequeue();

	}).delay(dl).scrollTo("40%").queue(function() {

		hrefs = hrefs.concat(getLinks());
		$(this).dequeue();

	}).delay(dl).scrollTo("50%").queue(function() {

		hrefs = hrefs.concat(getLinks());
		$(this).dequeue();

	}).delay(dl).scrollTo("60%").queue(function() {

		hrefs = hrefs.concat(getLinks());
		$(this).dequeue();

	}).delay(dl).scrollTo("70%").queue(function() {

		hrefs = hrefs.concat(getLinks());
		$(this).dequeue();

	}).delay(dl).scrollTo("80%").queue(function() {

		hrefs = hrefs.concat(getLinks());
		$(this).dequeue();

	}).delay(dl).scrollTo("90%").queue(function() {

		hrefs = hrefs.concat(getLinks());
		$(this).dequeue();

	}).delay(dl).scrollTo("100%").queue(function() {

		hrefs = hrefs.concat(getLinks());
		$(this).dequeue();

	});



	return unique(hrefs);


}

★★★★★

Последнее исправление: Qwentor (всего исправлений: 1)

Ну цепочка из всех этих delay, scrollTo, queue это асинхронная штука, соответственно к моменту return из функции hrefs будет пустым. Надо в последнюю функцию в цепочке засунуть некую инструкцию, которая выбросит результат наружу. Не знаю, как в слимере, а в фантоме можно было сделать console.log(result) и захватить этот результат. Или можно передать внутрь page.evaluate некий callback, который вызвать из последнего обработчика.

sholom
()
Ответ на: комментарий от sholom

передать внутрь page.evaluate некий callback, который вызвать из последнего обработчика

а как?

Qwentor ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.