sql >> Database >  >> NoSQL >> MongoDB

Illegale break-statement (Node.js)

Je break statement bevindt zich niet in de body van een lus. Het bevindt zich in plaats daarvan in de hoofdtekst van een functie, namelijk de findOne terugbellen. Om dit duidelijker te zien, kan het handig zijn om tijdelijk een benoemde functie te gebruiken als uw callback-handler:

var cb = function(err, data){
    if (data.id){
        uniqueNumber++;
    }
    else {
        saveLandmark(newUnique);
        break;  // not inside a loop!
    }
};

db.collection('landmarks').findOne({'id':uniqueIDer}, function(err, data){
    //if ID exists already
    if (data.id){
        var uniqueNumber = 1;
        while (1) {
            var uniqueNum_string = uniqueNumber.toString(); 
            var newUnique = data.id + uniqueNum_string;
            db.collection('landmarks').findOne({'id':newUnique}, cb);
        }
    }
    else {
        saveLandmark(uniqueIDer);
    }
});

Het is nu vrij duidelijk dat de break in de callback-functie bevindt het lichaam zich niet in een lus! Ik heb dingen ook op andere manieren laten breken omdat het uniqueNumber en newUnique waarden vallen niet meer onder het bereik, maar dat is een ander probleem. :) Het belangrijkste om hier te zien is dat een functie een "harde" grens in uw code introduceert die moeilijk te zien kan zijn, puur op basis van de syntaxis van de taal. Dit is een van de redenen waarom deze callback-stijl van programmeren zo lastig kan zijn om goed te krijgen.

In feite is het veel moeilijker om dit te doen dan je oorspronkelijke poging tot de code zou impliceren. U moet een manier hebben om een ​​successignaal door mogelijk willekeurige lagen van callbacks door te geven als u herhaaldelijk findOne belt en analyseer het resultaat (asynchroon).

Je kunt hier misschien wat hulp bij krijgen door de uitstekende async . te gebruiken bibliotheek, bijvoorbeeld https://github.com/caolan/async#whilst .




  1. Kan geen verbinding maken met mongodb Fout:kan geen verbinding maken met server 127.0.0.1:27017 op src/mongo/shell/mongo.js:L112

  2. Opslaan en ophalen van JavaScript-objecten in/van MongoDB

  3. MongoDB - Fout:opdracht getMore mislukt:cursor niet gevonden

  4. Twitter-achtige app met MongoDB