[英]Rust futures `try_filter_map` causing panic: 'async fn resumed after completion'
我有一個生成結果的流,我想在這些項目上應用 try_filter_map() 並獲取第一個不會導致錯誤的項目。
考慮以下示例:( 游樂場)
use futures::{pin_mut, prelude::*};
use tokio;
#[tokio::main]
async fn main() {
let s = stream::iter(vec![Ok(1), Ok(2), Ok(3)])
.try_filter_map(|v| async move { if v == 1 { Err("Ohno!") } else { Ok(Some(v)) } })
.inspect_err(|err| println!("Error {:?}", err))
.filter_map(|r| future::ready(r.ok()));
pin_mut!(s);
let result = s.next().await;
println!("{:?}", result);
}
當我運行此代碼時,我收到以下錯誤:
Error "Ohno!"
thread 'main' panicked at '`async fn` resumed after completion'
我對 Rust 相當陌生,可以使用一些幫助來解決這個問題。
這似乎是一個錯誤。 在新版本修復該問題之前,您似乎在使用try_filter_map
而不實際過濾流? 如果是這種情況,您可以使用and_then
代替:
let s = stream::iter(vec![Ok(1), Ok(2), Ok(3)])
.and_then(|v| future::ready(if v == 1 { Err("Ohno!") } else { Ok(v) }))
.inspect_err(|err| println!("Error {:?}", err))
.filter_map(|r| future::ready(r.ok()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.