MongoDb内置承诺

hmmo2u0o  于 2022-11-22  发布在  Go
关注(0)|答案(3)|浏览(100)

如何知道mongoDb中的所有方法都有一个内置的承诺。例如:“updateOne(),findOne()x1c 0d1x”这些方法都有内置的承诺,我们可以使用.”then“访问响应,但对于许多其他mongoDB方法来说,它们都缺少此特性,我们如何才能确定哪些方法没有内置的承诺?
例如:“find()”没有内置的承诺,所以我们不能执行“find().then((response)=〉{})”,这将给予一个错误。而“findOne().then((response)=〉{})”将正常工作,没有任何问题。

jv4diomz

jv4diomz1#

这在整个NodeJS MongoDB驱动程序中是不一致的,因为一些方法返回更复杂的对象来操作返回值。例如,.find()返回一个FindCursor对象,该对象可用于通过重复调用.next()来迭代结果。
我建议经常参考NodeJS驱动程序的MongoDB文档(找到here,或者常见的用法示例是here)。文档相当广泛,应该有助于解决此类问题。
您还可以考虑使用TypeScript,我个人发现它对此类情况很有帮助,因为您可以很容易地判断函数/方法调用返回的对象类型。

m1m5dgzv

m1m5dgzv2#

我建议经常参考NodeJS驱动程序的MongoDB文档(在这里可以找到,或者在这里可以找到常见的用法示例)。

tjvv9vkg

tjvv9vkg3#

在节点Js中的MongoDB本地驱动程序中的find方法存在一些不一致。这是因为find方法返回一个游标的原因。因此,我们在这里可以做的是使用toArray()方法将其转换为数组。
这里最好的解决方案是使用async await而不是承诺链,这将为我们提供一个更干净、更容易使用的语法。
例如:假设我们想找到产品集合中的所有产品,下面是一个函数。

const findAll=async(userId)=>{
    const userData= await db.products.find().toArray();
    console.log(userData);
    return userData;
}

通过调用上述函数,我们将获得产品集合中的所有产品。通过查看代码,我们可以看到它提供了比到处链接承诺更可读的语法。

相关问题