首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Parse中同步2异步取?

如何在Parse中同步2异步取?
EN

Stack Overflow用户
提问于 2015-04-25 13:30:24
回答 1查看 112关注 0票数 4

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

代码语言:javascript
运行
复制
let query = PFQuery(className: "A")
query.getObjectInBackgroundWithId("1", block: { (a, error) -> Void in

然后我从a得到b和c

代码语言:javascript
运行
复制
var b = a!["B"] as! PFObject
var c = a!["C"] as! PFObject

然后,我需要分别获取b和c对象。

代码语言:javascript
运行
复制
b.fetchInBackgroundWithBlock({ (fetchedB, error) -> Void in

问题是,抓取方法是异步的,如果我将它们放在同一个线程中,那么最终将不能保证将它们都取下来。

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

代码语言:javascript
运行
复制
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

但是,如果需要更多的对象,就会成为嵌套过程中的嵌套。比如:

代码语言:javascript
运行
复制
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并不相互依赖--在单独的线程上获取它们应该是完美的!

那么,是否有一种方法可以使回调在主线程的某个时刻互相等待,以确保所有对象都被获取?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-27 18:26:26

在执行查询时,使用第一个PFQuery上的PFQuery方法告诉解析,以获取类B和C。includeKey

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29865837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档