Javascript 正在获取数据,是否在加载webapp之前编辑MongoDB集合?异步,承诺?

Javascript 正在获取数据,是否在加载webapp之前编辑MongoDB集合?异步,承诺?,javascript,node.js,mongodb,asynchronous,mongoose,Javascript,Node.js,Mongodb,Asynchronous,Mongoose,我正在使用MongoDB和NodeJS,并尝试在每次加载网站时预加载我的收藏customers。我正在清空它,用空文档填充它,最后用来自外部源的真实数据替换其中的任何一个(如果可用) 我尝试使用save(),但它给出了错误消息'ParallelSaveError'-无法将同一个文档并行保存()多次。文档:3“。在呈现数据之前不会获取数据。这会导致仪表板中缺少项目,只显示一个或两个。我阅读了一些关于异步函数和承诺的内容,但我不确定如何在我的案例中应用它们。如何实现这一点 dbtools.js va

我正在使用MongoDB和NodeJS,并尝试在每次加载网站时预加载我的收藏
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
来包装它,但我仍然得到了。。