Wie stoppe ich die Iteration und gebe einen Fehler zurück, wenn Iterator :: map ein Ergebnis :: Err zurückgibt?

Ich habe eine Funktion, die ein @ zurückgiResult:

fn find(id: &Id) -> Result<Item, ItemError> {
    // ...
}

Dann eine andere Verwendung davon wie folgt:

let parent_items: Vec<Item> = parent_ids.iter()
    .map(|id| find(id).unwrap())
    .collect();

Wie gehe ich mit dem Fehlerfall in einem dermap Iterationen?

Ich weiß, ich könnte @ verwendflat_map und in diesem Fall wären die Fehlerergebnisse ignoriert:

let parent_items: Vec<Item> = parent_ids.iter()
    .flat_map(|id| find(id).into_iter())
    .collect();

Resulte nach Erfolgsstatus hat der Iterator von @ entweder 0 oder 1 Elemente, undflat_map filtert es heraus, wenn es 0 ist.

Allerdings möchte ich nichtignoriereei @ -Fehlern möchte ich stattdessen dafür sorgen, dass der gesamte Codeblock angehalten wird und ein neuer Fehler zurückgegeben wird (basierend auf dem Fehler, der in der Karte aufgetreten ist, oder einfach den vorhandenen Fehler weitergeleitet wird).

Wie gehe ich in Rust am besten damit um?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage