如何在 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!
}
我有一个函数设置为 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!
}