दिलचस्प पोस्ट
एक वैकल्पिक फैशन में दो सूचियों को गठबंधन करने का पायथनिक तरीका है? मेल खाता समूह के संदर्भ में जावास्क्रिप्ट की जगह है? हाशिया-शीर्ष स्पैन तत्व के लिए काम नहीं कर रहा है? अजगर: कई संदर्भ प्रबंधकों पर "के साथ" ब्लॉक बनाएं मैं एक्सएमएल में एम्पर्सैंड से कैसे बच सकता हूं ताकि उन्हें एचटीएमएल में संस्थाओं के रूप में प्रस्तुत किया जाए? जावा का कच्चा प्रकार और जेनेरिक इंटरैक्शन एक इकाई फ़्रेमवर्क मॉडल बनाने के लिए एकाधिक डेटाबेस बनाना सी # एचटीटीपी क्लाइंट 4.5 मल्टीपार्ट / फॉर्म-डेटा अपलोड Unwind segue programmatically कैसे करें? एंड्रॉइड पर एक सूचीईव्यू कैसे गतिशील रूप से अद्यतन करें नेविगेशन नियंत्रक कस्टम संक्रमण एनीमेशन सूचक अंकगणित में सी एक लिंक बनाएं एक नई विंडो खोलें (न टैब) एक लाख के लिए वैकल्पिक यदि बयान क्या मैं सी + + मुख्य फ़ंक्शन और वर्गों को संकलित और लिंक पर उद्देश्य-सी और / या सी रूटीन से अलग कर सकता हूं?

मोंगोज़ज़.जेएस क्वेरी बनाना सिंक्रोनस रूप से चल रहा है

मेरे पास दो मोंगोअस संग्रह हैं सबसे पहले स्थानों की एक सूची स्टोर करता है, दूसरी जगहों का दौरा किया जाता है। मेरा नोड कोड प्रत्येक जगह की विज़िट की सूची प्राप्त करने और प्रयास करने के प्रयासों के माध्यम से जाता है और स्ट्रिंग का निर्माण करता है जो कि मैं JSON के रूप में आउटपुट करता हूं। पहली क्वेरी दूसरी बार शुरू होने से पहले पूरी होती है – क्या उन्हें एक तरह से चलाने के लिए एक तरीका है?

वेब के समाधान से एकत्रित समाधान "मोंगोज़ज़.जेएस क्वेरी बनाना सिंक्रोनस रूप से चल रहा है"

यदि आप node.js का उपयोग कर रहे हैं तो आपको https://github.com/caolan/async का उपयोग करना चाहिए

जब आपको कई संग्रह से डेटा प्राप्त करना पड़ता है, तो आपको अपने प्रश्नों को कई बार श्रृंखलाबद्ध करना पड़ता है

यह आपके कोड को जटिल और पढ़ने के लिए मुश्किल होगा और कोई विनम्रता नहीं। Mongodb और node.js का उपयोग करके मॉड्यूलरिटी बनाने के लिए async का उपयोग करें

मेरे प्रोजेक्ट से उदाहरण कोड:

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 } 

Mongodb / mongoose प्रश्नों के लिए कोई देशी सिंक्रोनस एपीआई नहीं है (और आपकी व्यावहारिकता में कोई भी नहीं चाहते हैं)। जैसा कि वायर्डप्रैरी का उल्लेख है, आपको पहली बार पूरा होने और कॉलबैक चलाने के बाद शुरू होने वाला दूसरा वाला प्रश्न पूछना चाहिए। यहाँ एक उदाहरण है:

 function findVisits(placesQuery,callback){ Places.find(placesQuery).exec(function(err,places){ if (err || !places.length){ console.log('there was a problem'); callback(err, null); }else{ var visitQuery = ... //however you want to filter places Visits.find(visitQuery).exec(function(err2,visits){ if (err2 || !visits.length){ console.log('there was a problem'); callback(err2,null); }else{ callback(null, visits) } }); } }); } 

यदि आप नोड 8.x का उपयोग कर रहे हैं तो आप async / await का उपयोग कर सकते हैं: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/ await

इंतजार ऑपरेटर एसिंक समारोह के निष्पादन को रोकता है जब तक वादा हल नहीं हो जाता है और मूल्य लौटाता है। इस तरह आपका कोड अधिक तुल्यकालिक दिखाई देगा:

 const query1 = MyModel.find({ name: /john/i }, null, { skip: 10 }); const result1 = await query1.exec(); const query2 = MyModel.find({ name: /john/i }, null, { skip: 100 }); const result2 = await query2.exec(); 

उत्तराधिकार में प्रश्नों को निष्पादित किया जाएगा

सिंक्रनाइज़ करने के लिए मैं es6-promise का इस्तेमाल किया

 var Promise = require('es6-promise').Promise , mongoose = require('mongoose') , Schema = mongoose.Schema; // define schemas and models. var placeSchema = new Schema({ name: { type: String }, memo: { type: String } }) , Places = mongoose.model('place', placeSchema) , visitSchema = new Schema({ placeName: { type: String }, // foreign key for place. visitor: { type: String }, comment: { type: String } }) , Visits = mongoose.model('visit', visitSchema); // query for visits by visitor and place. function findVisitsWithPlace(visitor, place) { return new Promise(function (resolve, reject) { Visits.find({ visitor: visitor, placeName: place.name }, function (error, visits) { if (error) { reject(error); return; } // build a result object you want. // () resolve({ place: place, visits: visits }); }); }); } // functions for node route. module.exports = { // - access to "GET /placevisits/?visitor=Visitor-1". get: function (request, response) { var visitor = request.query.visitor; // - to get the places... Places.find({}, function (error, places) { Promise.all(places.map(function (place) { // - run the child queries with parent object... return findVisitsWithPlace(visitor, place); })).then(function (placeAndVisits) { // - and get result. // placeAndVisits have still contain visits empty. // exclude them. var result = []; placeAndVisits.forEach(function (placeandvisit) { if (placeandvisit.visits.length != 0) { result.push(placeandvisit); } }); response.json(result); }); }); } }; 

और मैं JSON जैसे निम्नलिखित मिल गया।

 [ { "place": { "_id": "564e58a1dbed862155771d46", "name": "Place-A", "memo": "A memo for Place A." }, "visits": [ { "_id": "564e58cedbed862155771d49", "placeName": "Place-A", "visitor": "Visitor-1", "comment": "A comment for Place A by Visitor-1" }, { "_id": "564e58dcdbed862155771d4a", "placeName": "Place-A", "visitor": "Visitor-1", "comment": "2nd visit. Again comment for Place A by Visitor-1" } ] }, { "place": { "_id": "564e58afdbed862155771d47", "name": "Place-B", "memo": "A memo for Place B." }, "visits": [ { "_id": "564e58ebdbed862155771d4c", "placeName": "Place-B", "visitor": "Visitor-1", "comment": "A comment for Place B by Visitor-1" } ] } ] 

इन दिनों का मुंह, वादे का समर्थन करता है, ताकि आप कर सकते हैं। .then() आपके प्रश्न। उदाहरण के लिए:

 app.get(function (req, res, next) { Users.findOne({ username: req.body.username, password: req.body.password, }).then(user => { if (!user) { res.json({success: false, message: "Username or password incorrect."}); return; } return Notifications.find({ user: user._id }).then(notifications => { res.json({success: true, notifications}); }); ).catch(error => { //console.error(error); //res.json({success: false, error: error.message}); next(error); }); }); 

MongooseJS का उपयोग करते हुए छद्म तुल्यकालिक अनुरोध बनाने के लिए यहां एक वैकल्पिक विधि है यहां विचार करने के लिए उन कतारों की एक पंक्ति तैयार करना है, जिन्हें क्रियान्वित करने की आवश्यकता है। फिर एक ऐसा फ़ंक्शन बनाएं जिसे कतार समाप्त होने तक रिकर्सिव कहा जाता है। एक बार कतार समाप्त हो जाने पर, रिकर्सन बंद हो जाता है और मूल अनुरोध के लिए एक प्रतिक्रिया वापस भेजी जाती है। मैं एक्सप्रेस मार्गों का उपयोग कर रहा हूं, इसलिए यह कोड मेरे रूट हैंडलर में समझाया गया है। इस मामले में एक HTTP पोस्ट

 var express = require('express'); var router = express.Router(); //POST /auth/create router.post('/create', function(req, res) { var queue = [ {"schema": require('..\\models\\people.js'), "query": {username: req.body.username}}, {"schema": require('..\\models\\members.js'), "query": {username: req.body.username}} ], retData = []; var curTask = 0. function recurse() { if(curTask < queue.length){ var task = queue[curTask]; task.schema.findOne(task.query, function(err, data){ retData.push(err || data); curTask++; recurse(); }) }else{ res.json(retData); } } recurse(); }); module.exports = router;