如何在 PromiseKit 中设置 when(fulfilled:)?
Posted
技术标签:
【中文标题】如何在 PromiseKit 中设置 when(fulfilled:)?【英文标题】:How to set up when(fulfilled:) in PromiseKit? 【发布时间】:2017-03-18 22:33:04 【问题描述】:我设置了一个函数来返回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。因此,我尝试在viewDidLoad()
中设置when
语句,如下所示:
override func viewDidLoad()
super.viewDidLoad()
when(fulfilled: Query()).then
//do more asynch stuff
但是,我收到 xcode 无法“使用参数列表类型‘(fulfilled:Promise<PFObject>
)’调用‘when’”的错误。我不知道如何解决这个问题,因为我认为我已经正确设置了它。 when
需要一个承诺,我给它一个承诺,所以我不知道该怎么做。
【问题讨论】:
什么是linkQueryy()
?
【参考方案1】:
尝试如下:
when(fulfilled: [linkQueryy()] as! [Promise<Any>]).then _ in
// do more asynch stuff
参数fulfilled:
需要是可迭代的。
顺便说一句,when(fulfilled:)
只有在你有很多 promise 并且需要等待全部成功完成时才需要。但在您的代码中,您只需要等待一个承诺。
对于单个promise,更好的方法是形成如下链:
firstly
linkQueryy()
.then _ -> Void in
// do more asynch stuff
.catch _ in
// error!
【讨论】:
以上是关于如何在 PromiseKit 中设置 when(fulfilled:)?的主要内容,如果未能解决你的问题,请参考以下文章
PromiseKit 3 for Swift2 中的“when”是不是已重命名?
在 T-SQL CASE 语句的 WHEN 条件中设置变量等于数字时语法不正确[关闭]