sql >> Databasteknik >  >> NoSQL >> MongoDB

Får mongoose.js-frågor att köras synkront

Om du använder node.js bör du använda https://github.com/caolan/async

när du måste hämta data från flera samlingar måste du kedja dina frågor flera gånger.

Det kommer att göra din kod komplex och svår att läsa och ingen modularitet. Använd asynkron för att skapa modularitet med mongodb och node.js

Exempelkod från mitt projekt :

var async = require('async');

var createGlobalGroup = function(socket, data) {
    async.waterfall(
    [
    /**
     * this function is required to pass data recieved from client
     * @param  {Function} callback To pass data recieved from client
     */

    function(callback) {
        callback(null, socket, data);
    },
    /**
     * Step 1: Verify User
     */
    verifyUser,
    /**
     * Step 2: Check User Access Rights And Roles
     */
    checkUserAccessRightsAndRoles,
    /**
     * Step 3: Create Project
     */
    createNewGlobalGroup], function(err, result) {
        /**
         * function to be called when all functions in async array has been called
         */
        console.log('project created ....')
    });
}
verifyUser = function(socket, data, callback) {
//do your query
    /**
     * call next function in series
     * provide sufficient input to next function
     */
    callback(null, socket, data, {
        "isValidUser": true,
    });
}

checkUserAccessRightsAndRoles = function(socket, data, asyncObj, callback) {
    //do your query
    if(condition) {
        callback(null, socket, data, {
            roles: result,
            "isValidUser": asyncObj.isValidUser,
            "userId": asyncObj.userId,
        });
    } else {
    //no call back
    }
}

var createNewGlobalGroup = function(socket, data, asyncObj, callback) {
//wanna stop then no callback
}


  1. Rdbtools på Redis Conf18

  2. Ruby - Redis-baserad mutex med utgångsimplementering

  3. Namnutrymmen i Redis?

  4. Anpassade användaranslutningssträngar för MongoDB-instanser med autentisering