У меня есть рекурсивная функция с запросом async. Я хочу сохранить в массиве, если запросы были успешными, но я не знаю, как это сделать. Конкретно это функция для загрузки файлов, и если функция получает папку, а файлы внутри этой папки также должны быть загружены.Рекурсивная функция с асинхронным запросом
Я думал о реализации этого с completionHandler, то об этом:
func uploadFiles(pathToFile: NSURL) ->[Bool]{
var suc: [Bool] = [Bool]()
self.uploadFileRec(pathToFile, suc: &suc){
(result: [Bool]) in
println(result)
}
return suc
}
func uploadFilesRec(pathToFile: NSURL, inout suc: [Bool], completionHandler: (result: [Bool]) -> Void){
var isDir: ObjCBool = ObjCBool(true)
var manager: NSFileManager = NSFileManager.defaultManager()
manager.fileExistsAtPath(pathToFile.path!, isDirectory: &isDir)
if(isDir){
var error: NSError? = nil
let contents = manager.contentsOfDirectoryAtPath(pathToFile.path!, error: &error) as! [String]
for fileName in contents {
if(fileName != ".DS_Store"){
var pathString = pathToFile.path! + "/" + fileName
var updatePathtoFile = NSURL(fileURLWithPath: pathString)
self.uploadFilesRec(updatePathtoFile!, suc: &suc, completionHandler: completionHandler)
completionHandler(result: suc)
}
}
}
else{
asyncFileUpload(...){
...
suc.append(/*successful or not*/)
}
}
}
Но проблема в том, что Println получить называют не только один раз, но столько, сколько uploadFileRec дозвонились внутрь. Поэтому, если бы я вызывал другую функцию вместо println, функция также вызывалась бы много раз. Так что я думаю, что идея с завершениемHandler была неправильной. Как еще я могу это понять?
Хорошо спасибо. особенно ваша жажда. Я этого не понимал. – boddAh234
Есть ли у вас идея по моей проблеме с «получить успешный или не массив из функции рекурсивной асинхронности»? – boddAh234