如何在Parse中同步2个异步提取?

时间:2015-04-25 13:30:24

标签: ios swift parse-platform

所以我有一个PFobject A,其中包含2个其他PFobjects B C作为值。当我构造我的本地对象a时,我需要两个对象B C.所以首先我通过执行查询来获取:

let query = PFQuery(className: "A")
query.getObjectInBackgroundWithId("1", block: { (a, error) -> Void in

然后我从

获得b和c
var b = a!["B"] as! PFObject
var c = a!["C"] as! PFObject

然后我需要单独获取b和c对象

b.fetchInBackgroundWithBlock({ (fetchedB, error) -> Void in

问题是,获取方法是异步的,如果我将它们放在同一个线程中,我将无法保证最终获取它们。

一种解决方案是将提取嵌套在回调中,这样一旦完成一次提取,它将启动另一次提取。

b.fetchInBackgroundWithBlock({ (fetchedB, error) -> Void in
    c.fetchInBackgroundWithBlock({ (fetchedC, error) -> Void in
        println(fetchedB)
        println(fetchedC) // Now they have values
        var myA = A(validB: fetchedB, validC: fetchedC) // Construction can continue

但是如果需要更多的对象,它将嵌套在嵌套中。像:

b.fetchInBackgroundWithBlock({ (fetchedB, error) -> Void in
    c.fetchInBackgroundWithBlock({ (fetchedC, error) -> Void in
        d.fetchInBackgroundWithBlock({ (fetchedD, error) -> Void in
            e.fetchInBackgroundWithBlock({ (fetchedE, error) -> Void in

但是b,c,d和e并不相互依赖 - 在单独的线程上获取它们应该是完美的!

那么有没有办法让回调在主线程中的某个点等待,以确保获取所有对象?

谢谢!

1 个答案:

答案 0 :(得分:1)

在第一个includeKey()上使用PFQuery方法告诉解析在执行查询时同时获取B类和C类。 Relevant documentation for includeKey