MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

O retorno de chamada do Node.js com atualização do MongoDB nunca retorna, embora atualize o banco de dados


Acho que você não entendeu como async.series funciona.

Suas funções em async.series não aceite callback como um argumento e eles não chamam isso. E esse request(...) stuff provavelmente não é uma função. Provavelmente é por isso que ele quebra o loop assíncrono. Tente isto:
async.series(
    [
        function(callback) { // <--- missing callback
            log('starting');
            db.connect('mongodb://127.0.0.1:27017/test',
                function(err, base){
                    if(err) throw err;
                    db = base;
                    callback(); // <--- missing callback
                });
        },
        function(callback) { // <--- missing function with callback
            request(website, function(err,resp,body) {
                start(err, resp, body, callback);
            })
        }
    ],
    function(){
        log('closing DB');
        db.close();
    }
);

Observe que adicionei callback argumento ao chamar start . Assim, você terá que refatorar seu código habilmente para que todas as funções aceitem callback que pode ser chamado no final quando você sabe que todos os trabalhos estão concluídos. Por exemplo, você pode adicionar async.parallel dentro de start e esta função pode ficar assim:
function start(err, resp, body, callback) {
    // some stuff happens here
    var jobs = []
    pageURLS.forEach(function(url, index, array){
        jobs.push(function(clb) {
            request(url, function(error,response,bodies) {
                // some stuff
                clb(); // <--- this refers to the local callback for the job
            });
        });
    });
    async.parallel(jobs, function() {
        // all jobs are done, let's finilize everything
        callback();
    });
};