Я полагаю, что вас обманул асинхронный характер Javascript. Пока ваша команда post
обрабатывается, Javascript переходит к следующей задаче ... allDocs
... и не находит ваши данные, потому что они все еще записываются в PouchDB.
Если вы заметили, каждый из примеров документа PouchDB API имеет 3 вкладки, позволяющие выбрать альтернативы Callback, Promise или Async / Await. Я уверен, что, как только вы это поймете, вы обнаружите, что Async / Await - , безусловно, - лучший способ работы с PouchDB.
Итак, пожалуйста, попробуйте следующее, и дайте мне знать, как вы поживаете:
/* Function to instantiate a new random JSON record */
const item = () => {
return {
_id: `Thing_${parseInt(1000*Math.random(), 10)}`,
stuff: ' silly random remark ',
}
};
/* Function to 'put', then retrieve, records from PouchDB */
const dbTest = async () => { // "async" advises JavaScript to expect (otherwise illegal) 'await' statements
console.log(`
Start ...
`);
try {
/* Remember the item ID */
const rndItemId = item();
/* Store the random item in PouchDB */
const response = await myapp.db.put(rndItemId); // Do NOT return until 'put' is complete
/* Log the response from PouchDB */
console.log(`response for <${rndItemId._id}> ....\n${JSON.stringify(response, null, 2)}`);
/* Get back all the random items we 'put' in the Pouch so far */
const result = await myapp.db.allDocs({ // Do NOT return until 'allDocs' is complete
include_docs: true,
attachments: true,
startkey: 'Thing_0',
endkey: 'Thing_999',
});
/* Log the result from PouchDB */
console.log(`result ....\n${JSON.stringify(result, null, 2)}`);
} catch (err) {
console.log(err);
}
console.log(`
... done!
`);
};
/* Call the above function */
dbTest();
/* Call it again */
dbTest();
Краткое примечание: обратите внимание на использование put
вместо post
! Пожалуйста, прочитайте 12 профессиональных советов для лучшего кода с PouchDB .