Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js async.each是否不等待循环完成?_Node.js_Asynchronous_Async Await_Async.js_Nightmare - Fatal编程技术网

Node.js async.each是否不等待循环完成?

Node.js async.each是否不等待循环完成?,node.js,asynchronous,async-await,async.js,nightmare,Node.js,Asynchronous,Async Await,Async.js,Nightmare,我正在读取文本文件中的链接,并使用噩梦js请求获取一些数据。因为我想等待每个请求完成,所以我使用sync库在链接中循环并执行request函数,只有当它完成后,才继续下一次迭代。这是我的密码: const Nightmare = require('nightmare'); const fs = require('fs'); const async = require('async'); const url = 'https://lojaonline.claro.com.br/celular';

我正在读取文本文件中的链接,并使用噩梦js请求获取一些数据。因为我想等待每个请求完成,所以我使用sync库在链接中循环并执行request函数,只有当它完成后,才继续下一次迭代。这是我的密码:

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.log(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.log('Erro: ');
            console.log(erro);
        }else{
            console.log('Ok');
        }
    });
}

function getPrecos (endereco) {
    console.log('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.log(result);
        });
    }catch(e){
        console.error(e);
    }
};

lerArquivo();
我想输出如下内容:

console.log('Recuperando dados de ' + link1);
//
//data
//
console.log('Recuperando dados de ' + link2);
//
//data
//
console.log('Recuperando dados de ' + link3);
//
//data
//
但我得到了:

console.log('Recuperando dados de ' + link1);
console.log('Recuperando dados de ' + link2);
console.log('Recuperando dados de ' + link3);

然后提取数据。这意味着循环不会等待函数完成。我在这里遗漏了什么?

使用
eachSeries
:工作得很有魅力!有点令人失望的是,这个问题仍然被标记为未回答,因为实际上没有发布答案,但评论已经给出了答案。所以它总是表现得好像从未得到过回答/