如何在 PromiseKit 中设置 when(fulfilled:)?

How to set up when(fulfilled:) in PromiseKit?

我有一个函数设置为 return a Promise<PFObject>。我想在 PromiseKit 的 when(fulfilled:) 功能中使用这个函数,但每当我尝试这样做时,我都会收到错误消息。这是returns Promise<PFObject>:

的函数
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)
                    }
                }
            })
        }
    }

如您所见,函数 return 是实现时的 Promise。因此,我尝试在 viewDidLoad() 中设置一个 when 语句,如下所示:

override func viewDidLoad() {
        super.viewDidLoad()

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

但是,我收到 xcode 不能 "invoke 'when' with an argument list type of '(fulfilled: Promise<PFObject>)'" 的错误。我不知道如何解决这个问题,因为我认为我已经正确设置了它。 when 需要一个承诺,我给了它一个,所以我不知道该怎么做。

尝试如下:

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

参数fulfilled:需要是可迭代的。

顺便说一下,when(fulfilled:)只有当你有很多承诺并且需要等待所有的承诺成功完成时才需要。但是在你的代码中,你只需要等待一个承诺。

对于单个 promise,更好的方法是形成一个链,如下所示:

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