调度异步Web服务调用队列

时间:2017-06-03 22:06:50

标签: facebook-graph-api swift3 grand-central-dispatch

我调用Facebook Graph API来获取通过Facebook登录我的应用程序的用户的电子邮件,Facebook ID和名称。

我成功获取了信息;我现在正在尝试使用调度组,因此调用图形的函数会等到图形API调用完成后再返回。图形请求是异步的。

我无法弄清楚此代码锁定的原因。

1)创建一个调度组

2)输入所述显示组

3)一旦检索到信息或发现错误,就离开小组

4)等待小组离开,然后返回

似乎我的调度组输入没有正确调用,但我无法弄清楚原因。

class func getFBInformation()->Bool {
    var fbResult = false

    let fbGraphGroup = DispatchGroup()

    fbGraphGroup.enter()

    FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, email"]).start { (connection, result, err) in
        if err != nil {
            fbResult = false
            print("Pre Error Signal")
            fbGraphGroup.leave()
            return
        }

        if let resultDict = result as? [String:AnyObject] {
            <Do things with graph results>

            print("Pre success signal")
            fbResult = true
            fbGraphGroup.leave()
        }
    }

    fbGraphGroup.wait()
    print("Post signal")

    return fbResult
}

1 个答案:

答案 0 :(得分:1)

怎么会有效? 首先进入组,然后在主线程上等待完成处理程序,直到它离开组。但是完成处理程序无法在主线程上执行以便能够离开组。

据我所知,您的完成处理程序由API在主队列上调度。没有必要使用任何其他类型的同步。