MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Незаконен оператор за прекъсване (Node.js)

Вашата break изразът не е в тялото на цикъл. Вместо това е в тялото на функция, а именно findOne обратно повикване. За да видите това по-ясно, може да бъде полезно временно да използвате наименувана функция като манипулатор на обратно извикване:

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

Вече е доста ясно, че break в тялото на функцията за обратно извикване не е вътре в цикъл! Също така съм карал нещата да се развалят по други начини, защото uniqueNumber и newUnique стойностите вече не са в обхвата, но това е друг проблем. :) Важното, което трябва да видите тук е, че функцията въвежда "твърда" граница във вашия код, която може да бъде трудно да се види въз основа единствено на синтаксиса на езика. Това е една от причините, поради които този стил на обратно извикване на програмиране може да бъде толкова труден за правилен.

Всъщност е много по-трудно да направите това, отколкото би предполагал първоначалният ви опит за кода. Ще трябва да имате начин за предаване на сигнал за успех през евентуално произволни слоеве от обратни извиквания, докато многократно извиквате findOne и анализирайте резултата (асинхронно).

Може да получите малко помощ с това, като използвате отличния async библиотека, например https://github.com/caolan/async#whilst .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. GroupBy множество колони в MongoDB

  2. Windows MongoDB - Инсталиран Compass, но не може да намери Compass в системата

  3. грешка при импортиране на pymongo ubuntu

  4. Макс и мин в mongodb

  5. спрете mongodb да създава динамично dbs и колекции