MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Nieprawidłowa instrukcja przerwania (Node.js)

Twój break instrukcja nie znajduje się w treści pętli. Zamiast tego znajduje się wewnątrz ciała funkcji, a mianowicie findOne oddzwonić. Aby lepiej to zobaczyć, pomocne może być tymczasowe użycie nazwanej funkcji jako funkcji obsługi wywołania zwrotnego:

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

Teraz jest całkiem jasne, że break w treści funkcji zwrotnej nie znajduje się w pętli! Sprawiłem też, że rzeczy psują się w inny sposób, ponieważ uniqueNumber i newUnique wartości nie są już w zakresie, ale to inny problem. :) Ważną rzeczą do zobaczenia jest to, że funkcja wprowadza „twardą” granicę w twoim kodzie, która może być trudna do zobaczenia na podstawie wyłącznie składni języka. Jest to jeden z powodów, dla których ten styl programowania wywołań zwrotnych może być tak trudny do wykonania.

W rzeczywistości jest to znacznie trudniejsze, niż sugerowałaby to twoja pierwotna próba kodu. Będziesz potrzebował sposobu na przekazywanie sygnału sukcesu przez możliwie dowolne warstwy wywołań zwrotnych, gdy będziesz wielokrotnie wywoływać findOne i przeanalizuj wynik (asynchronicznie).

Możesz uzyskać w tym pomoc, korzystając z doskonałego async biblioteka, na przykład https://github.com/caolan/async#whilst .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wyświetlanie wszystkich kolekcji w bazie danych mongo w skrypcie nodejs

  2. Używanie Jade do iteracji JSON

  3. Jak rozbroić wszystkie pola z wyjątkiem znanego zestawu pól?

  4. Play Framework 2.5 jak dodać mongoDB?

  5. Zwróć pierwszy element, jeśli nie znaleziono dopasowania w tablicy