gpt4 book ai didi

javascript - 如何通过异步等待在严格模式下正确使用集合

转载 作者:行者123 更新时间:2023-11-30 20:03:53 25 4
gpt4 key购买 nike

所以我想弄清楚如何将集合 strict 模式与 async/await 一起使用。它需要一个回调,但我不知道如何正确使用它,因为它似乎没有运行任何命令。

它给出了错误:

UnhandledPromiseRejectionWarning: MongoError: server instance pool was destroyed

这是我目前所拥有的。

    const cursor = 
await
db
.collection(
"invalidator",
{
strict: true
},
async function (error, cursor)
{
console.log(chalk.yellow("running callback"))
const result = await
cursor
.insertOne({
// created: new Date(),
test: "test"
})

console.log(result)
}
)

db 就是 MongoClient

    const db = await MongoClient.connect(
url,
{
useNewUrlParser: true,
},
)

最佳答案

只是为了清楚 collection()方法不返回 Promise。它实际上并不意味着返回任何东西,只有“严格模式”才需要 callback 接口(interface),这意味着 MongoDB 无法“创建一个集合”,当您随后尝试这样做时,该集合不存在给定名称任何东西。

在最短的演示程序中,如果您打算await callback< 中的操作,您基本上需要手动将“整个事情”包装在 Promise:

const { MongoClient } = require('mongodb');

const uri = 'mongodb://localhost:27017';
const opts = { useNewUrlParser: true };

const log = data => console.log(JSON.stringify(data, undefined, 2));

(async function() {

try {
const client = await MongoClient.connect(uri, opts);

let db = client.db('test');

// Expect to wait or fail if the collection named does not already exist
await new Promise((resolve, reject) => {
db.collection('test', { strict: true }, async (err, collection) => {
if (err) reject(err);

// really should have an "inner" try..catch to "bubble" any errors.
try {
// insert something
let result = await collection.insertOne({ a: 1 });
log(result);
resolve(); // resolve the Promise
} catch(e) {
reject(e);
}
});
})
log("I waited");

client.close();

} catch(e) {
console.error(e);
} finally {
process.exit()
}
})()

为了完整起见,您确实应该围绕回调的任何“内部”操作(例如 insertOne())设置 try..catch此处和随后的 reject() 处理 catch block 中的任何错误。

关于javascript - 如何通过异步等待在严格模式下正确使用集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53112434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com