Я читаю ссылки из текстового файла и делаю запросы с nightmare js для получения данных. Поскольку я хочу дождаться завершения каждого запроса, я использую библиотеку синхронизации для циклического просмотра ссылок и выполнения функции запроса, и только когда она будет завершена, перейдите к следующей итерации. Вот мой код:
const Nightmare = require('nightmare');
const fs = require('fs');
const async = require('async');
const url = 'https://lojaonline.claro.com.br/celular';
const lerArquivo = () => {
//var links = []
/*lr.eachLine('links.txt', function(link, isUltimoLink) {
console.info(link);
links.push(link);
if (isUltimoLink) {
return false; // para de ler
}
});*/
var links = require('fs').readFileSync('links.txt', 'utf-8').split('\n')
async.each(links, getPrecos, function(erro){
if (erro){
console.info('Erro: ');
console.info(erro);
}else{
console.info('Ok');
}
});
}
function getPrecos (endereco) {
console.info('Recuperando dados de ' + endereco);
const nightmare = new Nightmare({show: false, gotoTimeout: 999999999, waitTimeout: 999999999});
//acessando a página
try{
nightmare.goto(endereco).wait('input[id = "edit-cep-part1"]')
.type('input[id = "edit-cep-part1"]', '51030')
.wait('input[id = "edit-cep-part2"]')
.type('input[id = "edit-cep-part2"]', '560')
.click('input[value = "Confirmar"]');
}catch (e){
console.error(e);
}
//recuperando as informações
try{
nightmare.wait('#plans-tab').evaluate(function(){
return Array.from(document.querySelectorAll('tr.body')).map(element => element.innerText);
})
.end()
.then(function(result){
console.info(result);
});
}catch(e){
console.error(e);
}
};
lerArquivo();
Я хотел вывести что-то вроде этого:
console.info('Recuperando dados de ' + link1);
//
//data
//
console.info('Recuperando dados de ' + link2);
//
//data
//
console.info('Recuperando dados de ' + link3);
//
//data
//
Но я получаю:
console.info('Recuperando dados de ' + link1);
console.info('Recuperando dados de ' + link2);
console.info('Recuperando dados de ' + link3);
Затем данные извлекаются. Это означает, что цикл не ждет завершения функции. Что мне здесь не хватает?
Работал как шарм!
Немного разочаровывает, что этот вопрос все еще помечен как неотвеченный, потому что на самом деле ответа нет, но в комментариях уже есть ответ. Таким образом, он всегда будет выглядеть так, как будто на него не ответили. : /





Используйте
eachSeries: caolan.github.io/async/docs.html#eachSeries