【问题标题】:Google Drive API (GTL) - Create multiple folder paths in order?Google Drive API (GTL) - 按顺序创建多个文件夹路径?
【发布时间】:2015-08-30 08:36:00
【问题描述】:

我正在使用Google APIs Client Library for Objective-C (GTL) 访问Google Drive API

根据它的Introduction to the Google APIs Client Library for Objective-C

服务的查询执行本质上是异步的。

这意味着当您尝试创建类似 root/a/b/c 的路径时,在创建文件夹 b 之前,您必须:

  1. 确保 a 已创建,如果没有,请在 b 尝试检查它是否为 parentRef 之前创建它。

  2. 知道文件夹aid,以便您可以在其中创建b

c 也是如此。

我使用类似以下的方法在已知父文件夹 ID 中按名称获取文件夹的 id

    // Get parentID by name "parent".

    let query = GTLQueryDrive.queryForChildrenListWithFolderId(parentID)
    query.q = "mimeType='application/vnd.google-apps.folder' and '\(parentID)' in parents and trashed=false and title='\(name)'"

    query.maxResults = 1

    GTLFileTicket = GTLDriveService.executeQuery(
        query,
        completionHandler: {(
            ticket:         GTLServiceTicket!,
            object:         AnyObject!,
            error:          NSError!) -> Void in

            // Callback
            self.GTLFileTicket = nil
            if error == nil {
                // Get the id from the object. If nil make another query to create a folder named "name" within folder "parentID".
            } else {
                // error handles here.
            }
    })

在项目的另一部分,我在 for 循环中调用了上述方法:

var parent = "root"
for item in array {
    createFolderIfNotExisted(item, parent: parent)
    parent = item
}

显然,它会失败并最终只创建第一个文件夹,因为第二个查询甚至在第一个查询完成之前就开始了。我用谷歌搜索,但没有看到一种方法让它同步调用。 (虽然我看到 Java API 分支可以有 .await() 之类的东西?)

有没有办法确保调用可以按顺序执行?

【问题讨论】:

    标签: ios objective-c swift google-drive-api google-api-objc-client


    【解决方案1】:

    避免使用同步 for 循环。 createFolder 函数应该在完成后回调;该回调应该开始下一个循环迭代。

    【讨论】:

    • 那么如何创建一系列子文件夹并避免赛车问题?设置一个全局的[String],在回调块内一一做?
    • 数组不需要是全局的;它将被回调块捕获。
    • 我明白了,那我试试看。
    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多