Javascript 正在获取数据,是否在加载webapp之前编辑MongoDB集合?异步,承诺?
我正在使用MongoDB和NodeJS,并尝试在每次加载网站时预加载我的收藏Javascript 正在获取数据,是否在加载webapp之前编辑MongoDB集合?异步,承诺?,javascript,node.js,mongodb,asynchronous,mongoose,Javascript,Node.js,Mongodb,Asynchronous,Mongoose,我正在使用MongoDB和NodeJS,并尝试在每次加载网站时预加载我的收藏customers。我正在清空它,用空文档填充它,最后用来自外部源的真实数据替换其中的任何一个(如果可用) 我尝试使用save(),但它给出了错误消息'ParallelSaveError'-无法将同一个文档并行保存()多次。文档:3“。在呈现数据之前不会获取数据。这会导致仪表板中缺少项目,只显示一个或两个。我阅读了一些关于异步函数和承诺的内容,但我不确定如何在我的案例中应用它们。如何实现这一点 dbtools.js va
customers
。我正在清空它,用空文档填充它,最后用来自外部源的真实数据替换其中的任何一个(如果可用)
我尝试使用save()
,但它给出了错误消息'ParallelSaveError'-无法将同一个文档并行保存()多次。文档:3“
。在呈现数据之前不会获取数据。这会导致仪表板中缺少项目,只显示一个或两个。我阅读了一些关于异步函数和承诺的内容,但我不确定如何在我的案例中应用它们。如何实现这一点
dbtools.js
var empty = new Customer({
_id: '',
name: 'Unused',
surname: '',
birthday: '',
deathday: '',
phx: false,
ntw: false,
gender: 'empty'
});
module.exports = {
getCustomers: async function() {
// Fill array with empty slots
slots = [empty, empty, empty];
// Clearing collection
Customer.deleteMany({}, function(err) {});
// Looping through Array, add each Document
for (i = 0; i < slots.length; i++) {
slots[i]._id = i+1;
mongoose.connection.collection('customers').insert(slots[i]);
// or
slots[i].save(function (err) { if (err) return handleError(err); });
}
// Updating with external data
..
}
}
var tools = require('./dbtools.js');
..
router.get('/', function (req, res) {
tools.getCustomers();
Customer.find({}, function (err, customers) {
if (err) return handleError(err);
res.render('dashboard', {
title: 'Overview',
customers: customers
});
});
});
..
根据getCustomers函数中的
async
,函数中存在承诺/异步调用。如果是这样,任何调用该函数的函数都需要前面有一个wait
,以便捕获异步回调
router.get('/', function(req, res) {
try {
const customers = await tools.getCustomers();
res.render(...);
} catch (e) {
return handleError(err);
}
});
请告诉我这是否有帮助。@MukulDev试图按照那边vkarpov15的建议,用
try/catch
来包装它,但我仍然得到了。。