MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara membuat janji di dalam fungsi janji lain di node.js?

Mengelilingi semuanya dengan satu new Promise panggilan tidak membantu apa-apa. Di dalamnya, Anda masih memiliki panggilan balik neraka. Dan tidak, melempar Promise.resolve() pada fungsi yang tidak mengembalikan apa pun juga tidak membantu.

Anda harus berjanji primitif asinkron, yaitu bagian terkecil yang asinkron. Dalam kasus Anda, itu distance.matrix dan connect mon mongo +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();
                });
        });
    });
}

Sekarang setelah kami memilikinya, kami benar-benar dapat menggunakannya dan menggabungkan janji kami menjadi apa yang sebenarnya Anda cari:

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. Gunakan Mongosniff untuk mengklarifikasi apa yang MongoDB dengar dan katakan

  2. MongoDB allowDiskUse tidak berfungsi..

  3. Hapus subdokumen yang bersarang dalam array di MongoDB

  4. Koneksi Mongodb di PHP tidak berfungsi

  5. TypeError pada metode statis model luwak