MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Il callback di Node.js con l'aggiornamento di MongoDB non viene mai restituito sebbene aggiorni il DB

Penso che tu abbia frainteso come async.series funziona.

Le tue funzioni in async.series non accettare callback come argomento e non lo chiamano. E quella request(...) roba probabilmente non è affatto una funzione. Questo è probabilmente il motivo per cui interrompe il ciclo asincrono. Prova questo:

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();
    }
);

Nota che ho aggiunto callback argomento quando si chiama start . Quindi dovrai rifattorizzare il tuo codice in modo sbrigativo in modo che ogni funzione accetti callback che può essere chiamato alla fine quando sai che tutti i lavori sono stati eseguiti. Ad esempio puoi aggiungere async.parallel dentro start e questa funzione potrebbe assomigliare a questa:

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();
    });
};