Вызовы putData
, downloadURL
и setData
являются асинхронными. Это означает, что результат этих вызовов доступен только в обработчиках их завершения. Чтобы правильно использовать эти результаты, вам нужно вложить вызовы, как вы уже это делаете для обработки ошибок.
Так что-то вроде:
if let uploadData = self.imagePet?.jpegData(compressionQuality: 0.2) {
storageRef.putData(uploadData, metadata: nil) { (metadata, error) in
if error != nil {
print("error: \(String(describing: error))")
return
}
// once you get here, the data is uploaded to Cloud Storage, and
// you can get the download URL
storageRef.downloadURL(completion: {(url, error) in
if error != nil {
print(error!.localizedDescription)
return
}
// once you get here, you have the download URL, so you can
// write it to the database
let data = [
"pid" : newDocument.documentID,
"urlImagePet" : storageRef.description,
"image" : url!.absoluteString
]
newDocument.setData(data) { err in
if let err = err {
print("Error writing document: \(err)")
} else {
print("Document successfully written!")
}
}
})
}
}