Hi,

I'm new to CouchDB/nano and asynchronous JavaScript, and I hope this is
the right place to ask questions about how to use the nano API.

I'm trying to process all documents in a local CouchDB database with the
following code using nano (in the real program I want to get access to
all fields of each document):

const nano = require('nano')("http://localhost:5984";);
const larch = nano.db.use('larch');

larch.list().then((allDocs) => {
    var len = allDocs.rows.length;
    console.log('total # of docs -> ' + len);

    allDocs.rows.forEach((document) => {
        larch.get(document.id).then((body) => {
            console.log("id: " + body._id);
        });
    });
});

The output is:

total # of docs -> 80973
copydb.js:20
(node:24704) UnhandledPromiseRejectionWarning: Error: connect ENOBUFS
127.0.0.1:5984 - Local (undefined:undefined)
warning.js:18
    at Object._errnoException (util.js:992:11)
    at _exceptionWithHostPort (util.js:1014:20)
    at internalConnect (net.js:960:16)
    at defaultTriggerAsyncIdScope (internal/async_hooks.js:284:19)
    at GetAddrInfoReqWrap.emitLookup [as callback] (net.js:1106:9)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:97:10)
(node:24704) UnhandledPromiseRejectionWarning: Unhandled promise
rejection. This error originated either by throwing inside of an async
function without a catch block, or by rejecting a promise which was not
handled with .catch(). (rejection id: 1)
warning.js:18
(node:24704) [DEP0018] DeprecationWarning: Unhandled promise rejections
are deprecated. In the future, promise rejections that are not handled
will terminate the Node.js process with a non-zero exit code.
warning.js:18
(node:24704) UnhandledPromiseRejectionWarning: Error: connect ENOBUFS
127.0.0.1:5984 - Local (undefined:undefined)
... and so on ...

This happens on a Windows 10 machine with CouchDB 2.1.1 and node
v8.11.2. When I restrict the processing to a few rows by taking a slice
of the allDocs.rows array then no errors occur.

I found some pointers on stackoverflow that this error may be caused by
too many HTTP requests being done in parallel. So it looks like I'm
using the API in a wrong way to process all documents in a database.

What would be the correct approach to avoid the "connect ENOBUFS" errors?

Thanks
Stephan

Reply via email to