Wie gebe ich das Ergebnis meines Abrufs mit Mähdrescher zurück?

user1354934

Ich bin neu in der Kombination und habe Schwierigkeiten zu verstehen, wie ich das Ergebnis meiner Abrufnadeln zurückgeben kann.

Ich kann das Ergebnis so einstellen, @Publishedaber ich möchte nur die Abrufmethode aufrufen und auf das Ergebnis oder den Fehler warten können.

class PinService: NSObject, ObservableObject {
    private var session: Session
    private var subscriptions = Set<AnyCancellable>()
    
    init(session: Session) {
        self.session = session
        super.init()
    }
    
    func fetchPins (categories: Set<CategoryModel>, coordinates: CLLocationCoordinate2D)  {
        _fetchPins(categories: categories, coordinates: coordinates)
            .sink(receiveCompletion: { completion in
                switch completion {
                case .failure:
                    print("fetchPins() error")
                case .finished:
                    print("fetchPins() complete")
                }
            }, receiveValue: { pins in
                /*
                    What to do here?
                 
                    I can add a @Published var pins: [Pin], and do
                    self.pins = pins
                 
                    But if I want to be able to return the value or the error, how can I do that?
                 */
            })
            .store(in: &self.subscriptions)
    }
    

    private func _fetchPins(categories: Set<CategoryModel>, coordinates: CLLocationCoordinate2D) -> Future<[Pin], Error> {
        return Future<[Pin], Error> { promise in
            let categoryIds = categories.map { return $0.id }.joined(separator: ",")
            
            let radius = 15 //miles
            
            self.session.request(baseUrl + "/api/v1/pinsRadius?latitude=\(coordinates.latitude)&longitude=\(coordinates.longitude)&radius=\(radius)&categories=\(categoryIds)")
                .responseDecodable(of: [Pin].self) { (response: DataResponse) in
                    switch response.result {
                    case .success(let pins):
                        promise(.success((pins)))
                    case .failure(let error):
                        promise(.failure(error))
                    }
            }
        }
    }
}

Entschuldigung, wenn es eine dumme Frage ist, danke.

Joakim Danielson

Eine Lösung besteht darin, einen Completion-Handler in Ihrer Funktion zu verwenden und von dort aus aufzurufen receiveValue

func fetchPins (categories: Set<CategoryModel>, 
                coordinates: CLLocationCoordinate2D, 
                completion: @escaping (Result<[Pin], Error>) -> Void))  {
    _fetchPins(categories: categories, coordinates: coordinates)
        .sink(receiveCompletion: { completion in
            switch completion {
            case .failure(let error):
                completion(.failure(error))
                print("fetchPins() error")
            case .finished:
                print("fetchPins() complete")
            }
        }, receiveValue: { pins in
            completion(.success(pins))
        })
        .store(in: &self.subscriptions)
}

Ihr Anruf bei fetchPinswürde dann ungefähr so ​​aussehen

fetchPins(categories: someValue, coordinates: someOtherValue) { pins in
    //do stuff with pins here
}

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Wie gebe ich das Ergebnis eines rekursiven Abrufs zurück?

Wie gebe ich das Ergebnis der for-Schleifenzählung mit Python zurück?

Wie gebe ich das Ergebnis einer Mongodb-Pipeline mit einer Get-Methode zurück?

Wie gebe ich das Ergebnis von ADD AND in Python zurück?

Wie gebe ich das Ergebnis eines spirngEventListener zurück?

Wie gebe ich mit Python ein Wörterbuch mit jedem Ergebnis zurück, das in einer neuen Zeile gedruckt wird?

Wie füge ich eine Zeile in SQLite in einem anderen Thread ein und gebe das Ergebnis mit dem Handler zurück?

Wie blockiere ich ein Javascript-Versprechen und gebe das aufgelöste Ergebnis zurück?

GAS / JavaScript: Wie gebe ich das Ergebnis zurück und nicht beide?

Wie gebe ich das Ergebnis von zwei Abfragen untereinander zurück?

Wie gebe ich das React-Element aus einem Promise-Ergebnis zurück?

Wie vergleiche ich zwei Datenrahmen und gebe das Ergebnis zurück?

Wie gebe ich ein Ergebnis zurück, das auf Kriterien und angegebenen Summen basiert?

Wie gebe ich das Ergebnis von Cloud Functions richtig zurück?

Wie warte ich mit JavaScript auf das Ergebnis eines sekundären Abrufs, wenn das Ergebnis eines primären Abrufs ein bestimmter Wert innerhalb einer Schleife ist?

Wie gebe ich ein Ergebnis aus einem Dialog zurück?

Wie gebe ich ein Ergebnis einer asynchronen Aufgabe zurück?

Wie gebe ich in MVC ein String-Ergebnis zurück?

Wie rufe ich eine externe Methode einer Klasse mit Parametern von einer JSP-Seite auf und gebe das Ergebnis an diese zurück?

Wie addiere ich zwei Vektoren mit einem Skalar und speichere das Ergebnis in einem der beiden Vektoren und gebe diesen Vektor von einer Funktion in C zurück?

Wie öffne ich die Kamera aus einer Reihe von RecyclerView und gebe das Ergebnis in onActivityResult zurück?

Wie vergleiche ich zwei 2D-Arrays und gebe das Ergebnis in einer bestimmten Reihenfolge zurück (Google Apps Script)?

Wie gebe ich das Ergebnis aus der Addition von a und b in einer Long-Methode zurück?

Wie gebe ich das Zugriffstoken bei der Anmeldung mit oauth2 in drf zurück?

Wie gebe ich das "Text"-Feld dieser JSON-Datei mit jq zurück?

Wie gebe ich ein Listenelement als JSON in ASP.NET MVC mit dem Ergebnis der gespeicherten Prozedur zurück?

Wie gebe ich das Versprechen in einer asynchronen Methode zurück?

Wie iteriere ich Liste [Ergebnis] und gebe einen Booleschen Wert / Ergebnis zurück?

Wie gebe ich die Koordinaten meines ausgewählten Polygons zurück?

TOP Liste

heißlabel

Archiv