Google Drive API (GTL) - создать несколько путей к папкам по порядку?

Я использую клиентскую библиотеку API Google для Objective-C (GTL) для доступа к Google Drive API.

В соответствии с его введением в клиентскую библиотеку API Google для Objective-C,

Выполнение запроса сервисом изначально асинхронно.

Что означает, когда вы пытаетесь создать путь как: root/a/b/cпрежде чем вы сможете создать папку b, вам придется:

  1. Удостовериться a создан, если нет, создайте его раньше b пытался проверить это parentRef,

  2. Знать id папки a так что вы можете создать b в этом.

И то же самое c,

Я использую что-то вроде следующего, чтобы получить 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
}

По-видимому, произойдет сбой, и в итоге будет создана только первая папка, поскольку 2-й запрос начинается еще до того, как 1-й запрос будет завершен. Я гуглил вокруг, но не видел способа сделать это синхронными звонками вместо этого. (То есть я видел, что ветка Java API может иметь что-то вроде .await()?)

Есть ли способ убедиться, что вызовы могут быть выполнены в последовательности?

1 ответ

Решение

Избегайте использования синхронного цикла for. Функция createFolder должна перезвонить после завершения; этот обратный вызов должен начать следующую итерацию цикла.

Другие вопросы по тегам