sql >> Database >  >> NoSQL >> MongoDB

Hoe dit asynchrone probleem met MongoDB/Node te omzeilen?

Sommige talen bieden een speciale taalconstructie om dit probleem op te lossen. C# heeft bijvoorbeeld async /await trefwoorden waarmee u de code kunt schrijven alsof u synchrone API's aanroept.

JavaScript doet dat niet en u moet de createAccount . koppelen bellen met terugbellen.

Sommige mensen hebben bibliotheken ontwikkeld die u kunnen helpen bij het organiseren van deze code. Bijvoorbeeld async , stap , node-promise en Q

U kunt ook de vezels gebruiken bibliotheek, een native bibliotheek die de JavaScript-runtime uitbreidt met vezels / coroutines.

En sommige mensen hebben de taal uitgebreid met constructies die vergelijkbaar zijn met async /await :streamline.js , IcedCoffeeScript of wind.js . Streamline.js (ik ben de auteur, dus ik ben duidelijk bevooroordeeld) gebruikt bijvoorbeeld _ als een speciale callback placeholder en laat u uw voorbeeld schrijven als:

var db = MongoClient.connect("mongodb://localhost:27017/bq", _):
var accounts = db.createCollection('accounts', _);
createAccount("bob","bob", _);
createAccount("bob","bob", _);
createAccount("bob","bob", _);
createAccount("bob","bob", _);

function createAccount(email, password, _) {
    var item = accounts.findOne({"email":email}, _);
    if (item === null) {
        accounts.insert({"email":email, "password":password}, _);
        console.log("Account " + email + " created."); }
    } else {
        console.log("Account already exists.")
    }
}

En, last but not least, nieuwe taalfuncties zoals generatoren en uitgestelde functies worden besproken voor toekomstige versies van JavaScript (generatoren zullen zeer waarschijnlijk in ES6 terechtkomen, uitgestelde functies lijken een beetje vastgelopen).

Je hebt dus veel opties:

  • blijf bij terugbellen
  • gebruik een helperbibliotheek
  • gebruik de fiber runtime-extensie
  • gebruik een taalextensie
  • wacht op ES6


  1. C# MongoDB - Hoe kan ik een item toevoegen aan en verwijderen uit meerdere geneste array-elementen?

  2. Aggregate Query in Mongodb retourneert een specifiek veld

  3. Scala-serialisatie-uitzondering met opsommingswaarde

  4. Aanhoudend Python-object in het geheugen voor nginx/uwsgi-server