sql >> Databasteknik >  >> NoSQL >> MongoDB

Olagligt pausmeddelande (Node.js)

Din break uttalandet är inte inne i en loops brödtext. Det är istället inne i kroppen av en funktion, nämligen findOne ring tillbaka. För att se detta tydligare kan det vara bra att tillfälligt använda en namngiven funktion som din återuppringningshanterare:

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

Det är ganska tydligt nu att break i återuppringningsfunktionen är kroppen inte inne i en loop! Jag har också fått saker att gå sönder på andra sätt eftersom uniqueNumber och newUnique värden är inte längre i omfattning, men det är en annan fråga. :) Det viktiga att se här är att en funktion introducerar en "hård" gräns i din kod som kan vara svår att se utifrån syntaxen i språket. Detta är en av anledningarna till att den här återuppringningsstilen för programmering kan vara så svår att få till rätt.

Faktum är att det är mycket svårare att göra detta än vad ditt ursprungliga försök med koden skulle antyda. Du måste ha ett sätt att skicka en framgångssignal upp genom möjligen godtyckliga lager av återuppringningar när du upprepade gånger ringer findOne och analysera resultatet (asynkront).

Du kan få lite hjälp med detta genom att använda den utmärkta async bibliotek, till exempel https://github.com/caolan/async#whilst .




  1. Hur kan jag testa nya aggregeringsramverk för Mongodb

  2. docker-compose:redis anslutning nekad mellan containrar

  3. Mongoose grupp och räkna

  4. Hur hanterar Trello omarrangemang av kort, listor, checklistor mm