Javascript 在mongodb集合中添加项时如何管理foreach中的承诺

Javascript 在mongodb集合中添加项时如何管理foreach中的承诺,javascript,node.js,Javascript,Node.js,我尝试在mongodb集合中添加项目 解决这一问题的最佳方法是什么 putAlldata: function(items) { return new Promise(function(resolve, reject) { MongoClient.connect(config.dbDelinquency.url, function(err, db) { if (err) { reject(err); } else { resolve(db);

我尝试在mongodb集合中添加项目

解决这一问题的最佳方法是什么

  putAlldata: function(items) {
return new Promise(function(resolve, reject) {
  MongoClient.connect(config.dbDelinquency.url, function(err, db) {
    if (err) {
      reject(err);
    } else {
      resolve(db);
    }
  })
}).then(function(db) {
  return new Promise(function(resolve, reject) {

    var collection = db.collection('data');

    items.forEach(function(item) {
      //console.log(item);
      db.collection('data').insert(item)
    })
    resolve(items.length);

  });
});

}使用Promise.all和Array.map。I asume
db.collection.insert
返回一个承诺。如果没有,请告诉我

.then(function(db) {    
    return Promise.all(items.map(function(item) {
      return db.collection('data').insert(item)
    }))
    .then(() => items.length);
  });
});

您可以使用(insertMany),而不是对项目数组中的每个项目执行
。insert

当回调被省略时,MongoDB驱动程序还为大多数方法返回承诺,因此您不需要自己处理承诺

您可以将所有示例代码重写为:

return MongoClient.connect(url).then(db => db.collection('data').insertMany(items));
如果您确实想迭代并逐个执行
.insert
,则可以创建一个承诺数组并使用
Promise。所有
等待:

return Promise.all(items.map(item => db.collection('data').insert(item)));

您可以使用
.insert
.insertMany
进行批量插入

return new Promise((resolve, reject) => {
  const collection = db.collection('data');

  try {
    const results = db.collection.insertMany(items);
    return resolve(results);
  } catch (error) {
    return reject(error);
  }
}

作为旁注。。。。每次想打电话时都要创建DB连接,这是一种糟糕的做法

您将
.map
Promise.all
结合使用,因此它类似于:

var promises = items.map(item => {
  return db.collection('data').insert(item)
});
Promise.all(promises).then(...etc
中。然后
承诺。所有的
您都可以解决您自己的承诺