MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मैं node.js में किसी अन्य वादा फ़ंक्शन के अंदर एक वादा कैसे घोंसला करूं?

पूरी चीज़ को एक new Promise . से घेरना कॉल कुछ भी मदद नहीं करता है। इसके अंदर, आपके पास अभी भी कॉलबैक नरक होगा। और नहीं, फेंकना Promise.resolve() एक समारोह में जो कुछ भी वापस नहीं करता है वह भी मदद नहीं करता है।

आपको वादा करना करना होगा अतुल्यकालिक आदिम, यानी सबसे छोटे हिस्से जो अतुल्यकालिक हैं। आपके मामले में, वह distance.matrix है और मोंगो का connect +insert :

function getMatrix(m, o, d) {
    return new Promise(function(resolve, reject) {
        m.matrix(o, d, function(err, distances) {
            if (err) reject(err);
            else     resolve(distances);
        });
    });
}

function save(url, store, k) {
// cramming connect+insert in here is not optimal but let's not get into unnecessary detail
    return new Promise(function(resolve, reject) {
        MongoClient.connect(url, function(err, db) {
            if (err)
                reject(err);
            else
                db.collection(k).insert(store, function(err, results) {
                    if (err) reject(err);
                    else     resolve(results);
                    db.close();
                });
        });
    });
}

अब जब हमारे पास वे हैं, तो हम वास्तव में उनका उपयोग कर सकते हैं और अपने वादों को उस चीज़ में मिला सकते हैं जिसे आप वास्तव में खोज रहे हैं:

module.exports = Promise.all(dep.map(function(name) {
    distance.departure_time(name);
    return getMatrix(distance, origins, destinations).then(function(distances) {
        if (!distances) throw new Error('no distances');
        var promises = [];
        if (distances.status == 'OK') {
            for (var i=0; i < origins.length; i++) {
                for (var j = 0; j < destinations.length; j++) {
                    var origin = distances.origin_addresses[i];
                    var destination = distances.destination_addresses[j];
                    if (distances.rows[0].elements[j].status == 'OK') {
                        var duration = distances.rows[i].elements[j].duration_in_traffic.value;
                        var myobj = {
                            destination: destination,
                            departure_time: name,
                            duration: duration
                        };
                        var str = destination.replace(/[,\s]+/g, '');
                        promises.push(save(url, myobj, str));
//                                    ^^^^^^^^^^^^^^^^^^^^^
                    }
                }
            }
        }
        return Promise.all(promises); // now wait for all save results
    });
}));



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb $addFields और $match

  2. mongo में json फ़ाइल आयात करने का उचित तरीका

  3. MongoDb में अप्सर्ट शब्दकोश

  4. मोंगो क्वेरी के साथ आईडी द्वारा अद्यतन सरणी तत्व

  5. नेवला ढूँढता हैवनऔर अद्यतन एकाधिक फ़ील्ड अपडेट कर रहा है