Una función de Rust devuelve un futuro, después de .await() puede generar un panic!. ¿Cómo puedo evitar que el panic! detenga el programa?
Estoy haciendo una llamada de función call_data(), la cual retornará un futuro. En la función principal, utilizo una tarea tokio para llamar repetidamente a call_data() cada 60 segundos. En ocasiones, la llamada call_data().await produce un Error, lo que resulta en un panic! y detiene el programa. Intenté hacer lo siguiente: let a = call_data(“nombre”, “tabla”).await; y luego usar match, donde si Ok, el futuro es ejecutado, y si es un Error, continúa. Sin embargo, esto no funciona, ya que si ocurre un panic!, el programa aún fallará. ¿Existe alguna forma de evitar el panic! para este programa? A continuación se muestra el código sin utilizar match.
async fn main() {
let forever = task::spawn(async {
let mut interval = interval(Duration::from_millis(60000));
println!(“Comenzar”);
loop {
interval.tick().await;
call_data(“nombre”, “tabla”).await;
}
});
forever.await;
}
async fn call_data(nombre:&str, tabla: &str){
data().unwrap();
}
Este es el código en que utilizo match
async fn main() {
let forever = task::spawn(async {
let mut interval = interval(Duration::from_millis(60000));
println!(“Comenzar”);
loop {
let a =call_data(“BTC-USD”, “test3”).await;
match a{
Ok=>(),
Err=>continue,
}
}
});
forever.await;
}
async fn call_data(nombre:&str, tabla: &str){
data().unwrap();
}
davy.ai
Puede utilizar el método
.unwrap_or_else()
para evitar el pánico. Este método devolverá el resultado de la funcióncall_data()
o un valor predeterminado si ocurre un error.