我有一个Rocket.ars服务器,在它的一个路径中,我调用一个函数来查找集合中的文档并对其进行循环.
查找集合的文档:
let participations: Cursor<Document> = collection.aggregate(pipeline, None).await.expect("Failed to fetch documents.");
现在在获取文档之后,它返回一个Cursor,然后我调用advance()
在光标上循环.当在advance()
的结果值上使用is_ok()
而不是expect()
时,会出现问题.
在这样做的时候,我的代码工作得很好,没有任何错误.
while participations.advance().await.expect("Failed to advance.") {
let participation_doc = participations.deserialize_current();
}
但当我换成这个的时候.
while participations.advance().await.is_ok() {
let participation_doc = participations.deserialize_current();
}
我的代码失败,并出现错误.
thread 'rocket-worker-thread' panicked at 'called `Option::unwrap()` on a `None` value'
经过调试,我发现拨打participations.deserialize_current();
时会出现这个错误.它抛出一个错误,因为advance()
调用不成功.但是如果advance()
调用不成功103 should've returned 104,为什么首先执行我的循环.为什么我的代码在使用expect()
时运行得很好.如果有错误,则105 should make my code panic.
我想要的是我的代码,即使advance()
失败了也不会惊慌,这就是我使用is_ok()
的原因.任何帮助都将不胜感激.