3 个版本
0.1.2 | 2020 年 5 月 31 日 |
---|---|
0.1.1 | 2020 年 5 月 30 日 |
0.1.0 | 2020 年 5 月 12 日 |
194 在 WebAssembly 中
93,831 每月下载次数
在 17 个 Crates 中使用 (7 个直接使用)
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