MongoDB Node.js本机驱动程序无声地吞没了“ bulkWrite”异常

MongoDB Node.js本机驱动程序无声地吞没了“ bulkWrite”异常,第1张

MongoDB Node.js本机驱动程序无声地吞没了“ bulkWrite”异常

因此评论说,“这是一个错误”。具体来说,错误就在这里:

 // Return a Promise  return new this.s.promiseLibrary(function(resolve, reject) {    bulkWrite(self, operations, options, function(err, r) {      if(err && r == null) return reject(err);      resolve(r);    });  });

问题在于,

r
包装在a中的回调中的“响应”(或)
Promise
实际上不是
null
,因此尽管存在错误,也不会
true
reject(err)
不会调用该条件,而是
resolve(r)
正在发送并因此这不视为例外。

更正需要一些分类,但是您可以通过检查

writeErrors
当前
bulkWrite()
实现的响应中的属性来“解决”,也可以考虑以下其他替代方法之一:

直接使用Bulk API方法:
const MongoClient = require('mongodb').MongoClient,      uri  = 'mongodb://localhost:27017/myNewDb';(async () => {  let db;  try {    db = await MongoClient.connect(uri);    let bulk = db.collection('myNewCollection').initializeOrderedBulkOp();    bulk.find({ foo: 'bar' }).upsert().updateOne({      $setOnInsert: { count: 0 },      $inc: { count: 0 }    });    let result = await bulk.execute();    console.log(JSON.stringify(result,undefined,2));  } catch(e) {    console.error(e);  } finally {    db.close();  }})();

完全没问题,但是当然存在这样的问题:在没有Bulk API支持的情况下,无法在服务器实现上自然退步,而是改用传统API方法。

手动包装承诺
(async () => {  let db = await require('mongodb').MongoClient.connect('mongodb://localhost:27017/myNewDb');  let mongoOps = [{    updateOne: {      filter: { foo: "bar" },      update: {        $setOnInsert: { count:0 },        $inc: { count:1 },      },      upsert: true,    }  }];  try {    let result = await new Promise((resolve,reject) => {      db.collection("myNewCollection").bulkWrite(mongoOps, (err,r) => {        if (err) reject(err);        resolve(r);      });    });    console.log(JSON.stringify(result,undefined,2));    console.log("Success!");  } catch(e) {    console.log("Failed:");    console.log(e);  }})();

如前所述,问题在于如何

bulkWrite()
以a形式返回
Promise
。因此,您可以使用该
callback()
表单进行编码并自行
Promise
包装,以按照您的期望进行 *** 作。

再次指出,需要JIRA问题和Triage,这是处理异常的正确方法。但希望很快能解决。同时,从上方选择一种方法。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5476991.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存