Google Drive API (GTL) - 按顺序创建多个文件夹路径?
Google Drive API (GTL) - Create multiple folder paths in order?
我正在使用 Google APIs Client Library for Objective-C (GTL) to access the Google Drive API。
根据Introduction to the Google APIs Client Library for Objective-C,
Query execution by the service is inherently asynchronous.
这意味着当您尝试创建如下路径时:root/a/b/c
,然后才能创建文件夹 b
,您必须:
确保已创建 a
,如果未创建,请在 b
尝试检查其 parentRef
之前创建它。
了解文件夹 a
的 id
,以便您可以在其中创建 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()
的东西?)
有没有办法确保调用可以按顺序执行?
避免使用同步 for 循环。 createFolder 函数应该在完成时回调;该回调应该开始下一个循环迭代。
我正在使用 Google APIs Client Library for Objective-C (GTL) to access the Google Drive API。
根据Introduction to the Google APIs Client Library for Objective-C,
Query execution by the service is inherently asynchronous.
这意味着当您尝试创建如下路径时:root/a/b/c
,然后才能创建文件夹 b
,您必须:
确保已创建
a
,如果未创建,请在b
尝试检查其parentRef
之前创建它。了解文件夹
a
的id
,以便您可以在其中创建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()
的东西?)
有没有办法确保调用可以按顺序执行?
避免使用同步 for 循环。 createFolder 函数应该在完成时回调;该回调应该开始下一个循环迭代。