编辑:今天,我找到了实现解决方案的时间..实际上,我得到的数据还不错,但是我把它扔掉了。这是一个相当愚蠢的异步错误,我从没会在javascript中出现。所有这些调用都立即发生,但异步返回。为了保留数据,我现在正在使用这种形式(可能是更好的形式?但是我敢肯定,我无法避免在这里进行多个Firebase调用,因此没有最漂亮的解决方案可用):
var newAppsData:[(String, [AppData])] = []
var tx = 0
apps.forEach { app in
tx = tx + 1
let URI = "\(DataModel.constants.URIappCollection)/\(app)/tx"
DBIFirebase.db.collection(URI).getDocuments() { (snapshot, error) in
//...
tx = tx - 1
if tx == 0 {
if newAppsData.count == 0 { /* keep the data! */
我将时间序列数据保存在正在使用的每个“应用”下的集合中,其中的文档带有时间戳:
let docRef = DBIFirebase.db.document("\(DataModel.constants.URIappCollection)/\(app)/tx/\(dateString)")
docRef.setData(saveable) { (error) in
结果看起来正确,现在在Firestore数据库浏览器中,我看到sampleData/appName/tx/dateString
。
所以我想我应该以类似的方式来检索它们:
apps.forEach { app in
let URI = "\(DataModel.constants.URIappCollection)/\(app)/tx"
DBIFirebase.db.collection(URI).getDocuments() { (snapshot, error) in
if let error = error {
print("Firestore error loading data for app \(app) - \(error.localizedDescription)")
return
}
var appData: [AppData] = []
guard let documents = snapshot?.documents else {
print("no documents for app \(app)")
return
}
for document in documents {
let data = document.data()
//...
}
if appsData.count == 0 { // it always is, we do reach this
我很惊讶地发现调试器中从未到达if let error = error
(但是紧接在它之前的行)。当getDocuments完成时,控制台中什么都没有出现。.没有firebase或任何其他错误。
实际上,“使用情况”日志显示今天已发生读取操作。我只是没有看到结果。
可能是什么问题?
.getDocuments { (snapshot, error)
原来是错误的,更改为.getDocuments() { (snapshot, error)
-我真的很希望,但是结果没有什么不同答案 0 :(得分:0)
今天我找到了实现解决方案的时间..实际上,我得到的数据还不错,但是我把它扔掉了。所有这些调用都立即发生,但异步返回。为了保留数据,我现在正在使用这种形式(可能是更好的形式?但是我敢肯定,我无法避免在这里进行多个Firebase调用,因此没有最漂亮的解决方案可用):
var newAppsData:[(String, [AppData])] = []
var tx = 0
apps.forEach { app in
tx = tx + 1
let URI = "\(DataModel.constants.URIappCollection)/\(app)/tx"
DBIFirebase.db.collection(URI).getDocuments() { (snapshot, error) in
//...
tx = tx - 1
if tx == 0 {
if newAppsData.count == 0 { /* keep the data! */