MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Node.js-Callback mit MongoDB-Update kehrt nie zurück, obwohl es DB aktualisiert

Ich glaube, Sie missverstehen, wie async.series funktioniert funktioniert.

Ihre Funktionen in async.series callback nicht annehmen als Argument und sie nennen es nicht. Und diese request(...) Zeug ist wahrscheinlich überhaupt keine Funktion. Das ist wahrscheinlich der Grund, warum es die asynchrone Schleife unterbricht. Versuchen Sie Folgendes:

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

Beachten Sie, dass ich callback hinzugefügt habe Argument beim Aufruf von start . Daher müssen Sie Ihren Code so umgestalten, dass jede Funktion callback akzeptiert die am Ende aufgerufen werden kann, wenn Sie wissen, dass alle Jobs erledigt sind. Beispielsweise können Sie async.parallel hinzufügen innerhalb von start und diese Funktion könnte so aussehen:

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