簡體   English   中英

Rust 期貨 `try_filter_map` 導致恐慌:“異步 fn 在完成后恢復”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM