sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan kommer man uden om dette MongoDB/Node asynkrone problem?

Nogle sprog giver en særlig sprogkonstruktion til at håndtere dette problem. For eksempel har C# async /await nøgleord, der lader dig skrive koden, som om du kalder synkrone API'er.

JavaScript gør det ikke, og du skal kæde createAccount opkald med tilbagekald.

Nogle mennesker har udviklet biblioteker, der kan hjælpe dig med at organisere denne kode. For eksempel async , trin , node-løfte og Q

Du kan også bruge fibrene bibliotek, et indbygget bibliotek, der udvider JavaScript-runtiden med fibre/koroutiner.

Og nogle mennesker har udvidet sproget med konstruktioner, der ligner async /await :streamline.js , IcedCoffeeScript eller wind.js . For eksempel bruger streamline.js (jeg er forfatteren, så jeg er åbenlyst forudindtaget) _ som en speciel tilbagekaldspladsholder og lader dig skrive dit eksempel 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.")
    }
}

Og sidst men ikke mindst nye sprogfunktioner såsom generatorer og udskudte funktioner diskuteres for fremtidige versioner af JavaScript (generatorer lander med stor sandsynlighed i ES6, udskudte funktioner ser ud til at være en smule gået i stå).

Så du har mange muligheder:

  • hold dig til tilbagekald
  • brug et hjælpebibliotek
  • brug fibers runtime-udvidelsen
  • brug en sprogudvidelse
  • vent på ES6


  1. Sådan læser du fra MongoDB

  2. Uventet mongo exit kode 100. Genstarter

  3. Sådan ændres underdokument efter at have fundet med mongoose

  4. Mongodb Driver:mangler afgrænsende skråstreg mellem værter og muligheder