sql >> Database >  >> NoSQL >> MongoDB

Fout:sluit ETIMEDOUT aan tijdens het schrapen

Zoals besproken in opmerkingen, als je het maximale aantal verzoeken wilt beheren dat tegelijkertijd in de vlucht is, kun je Bluebird gebruiken om dat vrij eenvoudig als volgt te doen:

const Promise = require('bluebird');
const rp = require('request-promise');

router.get('/', (req, res) => {

    let collection = db.get().collection('foo');
    let collection2 = db.get().collection('test');
    collection.distinct('id', (err, idArr) => { // count: 3000+
        if (err) {
            // handle error here, send some error response
            res.status(501).send(...);
        } else {
            Promise.map(idArr, id => {
                let url = 'https://externalapi.io/id=' + id
                return rp(url).then(body => {
                    if (error) {
                        console.log(error)
                    } else {
                        let resp = JSON.parse(body);
                        // probably want to return a promise here too, but I'm unsure what DB you're using
                        collection2.insert(resp);
                    }
                }).catch(err => {
                    // decide what you want to do when a single request fails here
                    // by providing a catch handler that does not rethrow, other requests will continue
                });
                   // pick some concurrency value here that does not cause errors
            }, {concurrency: 10}).then(() => {
                // all requests are done, send final response
                res.send(...);
            }).catch(err => {
                // your code may never get here (depends upon earlier .catch() handler)
            });
        }
    });
});



  1. Een goed hulpmiddel voor het bouwen van een beheerders- / inhoudsbeheerinterface via MongoDB?

  2. MongoDB $ slice

  3. mongodb controleer of punt in polygoon is

  4. Inleiding tot Redis