#retry #future #futures-retry

again

适用于 std library futures 的 wasm 兼容重试工具

3 个版本

0.1.2 2020 年 5 月 31 日
0.1.1 2020 年 5 月 30 日
0.1.0 2020 年 5 月 12 日

194WebAssembly

Download history 13672/week @ 2024-03-14 12252/week @ 2024-03-21 11517/week @ 2024-03-28 15058/week @ 2024-04-04 11586/week @ 2024-04-11 19093/week @ 2024-04-18 22543/week @ 2024-04-25 18950/week @ 2024-05-02 21631/week @ 2024-05-09 24339/week @ 2024-05-16 25135/week @ 2024-05-23 27527/week @ 2024-05-30 22108/week @ 2024-06-06 22957/week @ 2024-06-13 24587/week @ 2024-06-20 18951/week @ 2024-06-27

93,831 每月下载次数
17 个 Crates 中使用 (7 个直接使用)

MIT 许可证

19KB
329

again ♻️

适用于 Rustlang std library Futures 的 wasm 兼容重试接口


任何操作的目标应该是成功的结果。这个 crate 给操作提供了更好的成功机会。

📦 安装

在你的 Cargo.toml 文件中,在 [dependencies] 标题下添加以下内容

again = "0.1"

🤸 使用

对于非常简单的情况,您可以使用模块级别的 retry 函数重试可能出错的操作。

use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    pretty_env_logger::init();
    again::retry(|| reqwest::get("https://api.you.com")).await?;
    Ok(())
}

您可能不希望重试 所有 类型的错误。为了精确,您可以使用模块级别的 retry_if 函数更明确地指定应重试哪些类型的错误。

use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    pretty_env_logger::init();
    again::retry_if(
      || reqwest::get("https://api.you.com")
      reqwest::Error::is_status
    ).await?;
    Ok(())
}

您还可以使用可配置和可重用的 RetryPolicy 来自定义重试行为以适应您的应用程序需求。

use std::error::Error;
use std::time::Duration;
use again::RetryPolicy;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    pretty_env_logger::init();
    let policy = RetryPolicy::exponential(Duration::from_millis(200))
      .with_max_retries(10)
      .with_jitter(true);
    policy.retry(|| reqwest::get("https://api.you.com")).await?;
    Ok(())
}

有关更多示例,请参阅 文档

Doug Tangren (softprops) 2020

依赖关系

~1.7–4MB
~73K SLoC