2017-03-18 1 views
0

Ich habe eine Funktion eingerichtet, um eine Promise<PFObject> zurückzugeben. Ich möchte diese Funktion in PromiseKits when(fulfilled:) Funktionalität verwenden, aber wenn ich versuche, dies zu tun, erhalte ich einen Fehler. Hier ist die Funktion, die gibt den Promise<PFObject>:Wie kann ich einstellen, wann (in PromiseKit :)?

func Query() -> Promise<PFObject>{ 
     return Promise{ fulfill, reject in 
      let linkQueryy = PFUser.query() 
      linkQueryy?.findObjectsInBackground(block: { (objectss, error) in 
       if let objects = objectss{ 
        for object in objects{ 
         fulfill(object) 
        } 
       } 
      }) 
     } 
    } 

Wie Sie sehen können, gibt die Funktion die Versprechen bei Erfüllung. So habe ich versucht, eine when Aussage in meinem viewDidLoad() setzen sich wie folgt zusammen:

override func viewDidLoad() { 
     super.viewDidLoad() 

     when(fulfilled: Query()).then{ 
      //do more asynch stuff 
     } 
    } 

Allerdings erhalte ich die Fehlermeldung, dass Xcode nicht „berufen‚ wenn‘mit einem Argument Liste Art‚(erfüllt: Promise<PFObject>)‘ ". Ich weiß nicht, wie ich das beheben soll, weil ich dachte, ich hätte es richtig eingerichtet. Die when braucht ein Versprechen, und ich gebe es ein, so dass ich nicht sicher bin, was zu tun ist.

+0

Was ist 'linkQueryy()'? – Macabeus

Antwort

2

Versuchen Sie wie folgt vor:

when(fulfilled: [linkQueryy()] as! [Promise<Any>]).then { _ in 
    // do more asynch stuff 
} 

Der Parameter fulfilled: Bedürfnisse ein iterable sein.

Übrigens ist when(fulfilled:) nur notwendig, wenn Sie viele Versprechen haben und warten müssen, bis alle erfolgreich abgeschlossen sind. Aber in Ihrem Code müssen Sie nur auf ein Versprechen warten.

Für eine einzige Versprechen, der bessere Weg ist es, eine Kette zu bilden, wie folgt:

firstly { 
    linkQueryy() 
}.then { _ -> Void in 
    // do more asynch stuff 
}.catch { _ in 
    // error! 
} 
Verwandte Themen