Versuchen Sie, eine eindeutige ID in Node.js und MongoDB zu finden, indem Sie eine while-Schleife erstellen, die MongoDB nach vorhandenen IDs abfragt, bis ein eindeutiger Wert gefunden wird. Wenn die ID bereits verwendet wird, wird eine Zahl am Ende erhöht, bis Mongo nichts zurückgibt.
Alles funktioniert, außer der break;
Anweisung, wenn eine eindeutige ID gefunden wird. Node.js gibt Folgendes zurück: SyntaxError: Illegal break statement
Der Code:
%Vor%Was mache ich falsch?
BEARBEITEN:
Hier ist der behobene Code, der async verwendet, wenn jemand es benötigt:)
%Vor% Ihre break
-Anweisung befindet sich nicht im Körper einer Schleife. Es befindet sich stattdessen im Körper einer Funktion, nämlich dem findOne
Callback. Um dies deutlicher zu sehen, kann es hilfreich sein, eine benannte Funktion vorübergehend als Callback-Handler zu verwenden:
Es ist jetzt ziemlich klar, dass das break
im Body der Callback-Funktion nicht in einer Schleife ist! Ich habe auch Dinge anders gemacht, weil die uniqueNumber
und newUnique
Werte nicht mehr im Bereich sind, aber das ist ein anderes Problem. :) Die wichtige Sache, die hier zu sehen ist, ist, dass eine Funktion eine "harte" Grenze in Ihrem Code einführt, die nur aufgrund der Syntax der Sprache schwer zu erkennen ist. Dies ist einer der Gründe, warum dieser Callback-Stil der Programmierung so schwierig sein kann, um richtig zu machen.
Tatsächlich ist es viel schwieriger, dies zu tun, als Ihr ursprünglicher Versuch mit dem Code implizieren würde. Sie müssen eine Möglichkeit haben, ein Erfolgssignal durch möglicherweise willkürliche Callback-Schichten zu senden, während Sie findOne
wiederholt aufrufen und das Ergebnis (asynchron) analysieren.
Sie können dabei Hilfe erhalten, indem Sie die ausgezeichnete async
-Bibliothek verwenden, zum Beispiel Ссылка .
Tags und Links javascript node.js asynchronous mongodb while-loop