2015-04-25 2 views
3

Итак, у меня есть PFobject A, который содержит 2 других PFobjects B C как значение. Когда я построить свой локальный объект а, я должен был бы как объекты B C. Таким образом, первый я получить бонус в выполнив запрос:Как синхронизировать 2 асинхронных выборки в Parse?

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

Тогда я получаю б и в с

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

Тогда мне нужно будет получать б и объекты по отдельности

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 

Однако Ь, с, d и е не зависят друг от друга - это должно быть идеальным, чтобы принести их на отдельные потоки!

Итак, есть ли способ заставить обратные вызовы ждать друг друга в какой-то момент основного потока, чтобы убедиться, что все объекты извлечены?

Спасибо!

ответ

1

Используйте метод includeKey() на первом PFQuery, чтобы рассказать синтаксический анализ для извлечения как класса B, так и C при выполнении запроса. Relevant documentation for includeKey

+0

Это просто работает! Спасибо! –

Смежные вопросы