sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kommer man runt detta MongoDB/Node asynkrona problem?

Vissa språk tillhandahåller en speciell språkkonstruktion för att hantera detta problem. Till exempel har C# async /await nyckelord som låter dig skriva koden som om du anropade synkrona API:er.

JavaScript gör det inte och du måste kedja createAccount samtal med återuppringningar.

Vissa personer har utvecklat bibliotek som kan hjälpa dig att organisera den här koden. Till exempel async , steg , node-löfte och Q

Du kan också använda fibrerna library, ett inbyggt bibliotek som utökar JavaScript-körtiden med fibrer/koroutiner.

Och vissa människor har utökat språket med konstruktioner som liknar async /await :streamline.js , IcedCoffeeScript eller wind.js . Till exempel, streamline.js (jag är författaren så jag är uppenbarligen partisk) använder _ som en speciell platshållare för återuppringning och låter dig skriva ditt exempel som:

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.")
    }
}

Och sist men inte minst, nya språkfunktioner som generatorer och uppskjutna funktioner diskuteras för framtida versioner av JavaScript (generatorer kommer med stor sannolikhet att landa i ES6, fördröjda funktioner verkar vara lite avstannade).

Så du har många alternativ:

  • håll dig till återuppringningar
  • använd ett hjälpbibliotek
  • använd fiberns runtime-tillägg
  • använd ett språktillägg
  • vänta på ES6


  1. Flerfältsfrågor på Redis med Redis Spring

  2. MongoDB i Go (golang) med mgo:hur använder man logiska operatorer för att fråga?

  3. Arbetar med PTVS, IronPython och MongoDB

  4. Grundläggande mellan datumfrågor $gte, $lte, etc