如何在PromiseKit中设置何时(履行:)?

时间:2017-03-18 22:33:05

标签: swift promisekit

我设置了一个函数来返回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中设置viewDidLoad()语句,如下所示:

override func viewDidLoad() {
        super.viewDidLoad()

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

但是,我得到的错误是,当参数列表类型为'(履行:Promise<PFObject>)'时,xcode无法“调用”。我不知道如何解决这个问题,因为我认为我已经正确设置了它。 when需要一个承诺,我给它一个,所以我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

尝试如下:

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

参数fulfilled:必须是可迭代的。

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

对于单一承诺,更好的方法是形成如下链:

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