3

我设置了一个函数来返回一个Promise<PFObject>. 我想在 PromiseKit 的when(fulfilled:)功能中使用此功能,但每当我尝试这样做时,都会出现错误。这是返回的函数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)
                    }
                }
            })
        }
    }

如您所见,该函数在完成时返回 Promise。因此,我尝试when在 my中设置viewDidLoad()如下声明:

override func viewDidLoad() {
        super.viewDidLoad()

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

但是,我收到错误消息,即 xcode 无法“使用参数列表类型‘(fulfilled:)’调用‘when’ Promise<PFObject>”。我不知道如何解决这个问题,因为我认为我已经正确设置了它。需要一个承诺,而when我正在给它一个承诺,所以我不知道该怎么做。

4

1 回答 1

2

尝试如下:

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!
}
于 2017-03-19T00:33:50.110 回答