使用 FireStore 同步获取文档
Getting a document synchronously using FireStore
我一直在使用 parse-server
作为我的后端,现在将我所有的东西迁移到 FireStore
(专门用于存储额外的用户数据)。现在,通过解析,我可以直接使用 ParseUser.getCurrentUser().getString(...)
获取用户数据。如果我使用 FireStore
,我已经创建了一个 users
集合,我可以为每个用户存储一个 document
,它还支持具有离线支持的本地存储。但是我面临的问题是我总是需要使用asynchronous/callback 方法从document
中获取数据。这是 android 中的示例:
final DocumentReference docRef = mFirestore
.collection(USER_COLLECTION).document(mAuthApi.getCurrentUserId());
docRef.get(Source.CACHE).addOnCompleteListener(task -> {
if(task.isSuccessful()) {
......
} else {
......
}
});
有没有一种方法可以直接从DocumentReference
同步获取数据假设它是本地缓存的?类似于:
mFirestore.collection(USER_COLLECTION).document(mAuthApi.getCurrentUserId()).getString(...)
这对我来说会很容易,因为我需要在我的整个代码库中用等效的 FireStore
调用替换 ParseUser.getCurrentUser().getString(...)
。
Is there a way where we can directly get data synchronously from DocumentReference assuming it is locally cached?
不,在响应式应用方面没有。您无法在连接到服务器时强制从缓存中检索数据,因为您无法在未连接到服务器时停止从缓存中检索数据。
但不仅 Firebase Realtime Database 或 Cloud Firestore 异步加载数据,几乎所有其他现代 Web API 都会异步加载数据,因为获取数据可能需要一些时间。因此,如果您强制同步获取数据,将导致您的用户的应用程序对话框无响应。
大多数开发人员的最初反应是尝试 "fix" 这种异步行为,我个人不建议这样做。 Web 是异步的,一旦您接受了这一点,您将学习如何使用现代 Web API 提高工作效率。
Doug Stevenson 写了一个非常有趣的post,可以帮助您更好地理解这个概念。
看起来你可以使用基于 Future
的 API,就像下面的行一样按顺序执行行,就好像它们是同步事件一样。
final documents = await Firestore.instance.document("/user/$_userId").collection('reviews').getDocuments();
我一直在使用 parse-server
作为我的后端,现在将我所有的东西迁移到 FireStore
(专门用于存储额外的用户数据)。现在,通过解析,我可以直接使用 ParseUser.getCurrentUser().getString(...)
获取用户数据。如果我使用 FireStore
,我已经创建了一个 users
集合,我可以为每个用户存储一个 document
,它还支持具有离线支持的本地存储。但是我面临的问题是我总是需要使用asynchronous/callback 方法从document
中获取数据。这是 android 中的示例:
final DocumentReference docRef = mFirestore
.collection(USER_COLLECTION).document(mAuthApi.getCurrentUserId());
docRef.get(Source.CACHE).addOnCompleteListener(task -> {
if(task.isSuccessful()) {
......
} else {
......
}
});
有没有一种方法可以直接从DocumentReference
同步获取数据假设它是本地缓存的?类似于:
mFirestore.collection(USER_COLLECTION).document(mAuthApi.getCurrentUserId()).getString(...)
这对我来说会很容易,因为我需要在我的整个代码库中用等效的 FireStore
调用替换 ParseUser.getCurrentUser().getString(...)
。
Is there a way where we can directly get data synchronously from DocumentReference assuming it is locally cached?
不,在响应式应用方面没有。您无法在连接到服务器时强制从缓存中检索数据,因为您无法在未连接到服务器时停止从缓存中检索数据。
但不仅 Firebase Realtime Database 或 Cloud Firestore 异步加载数据,几乎所有其他现代 Web API 都会异步加载数据,因为获取数据可能需要一些时间。因此,如果您强制同步获取数据,将导致您的用户的应用程序对话框无响应。
大多数开发人员的最初反应是尝试 "fix" 这种异步行为,我个人不建议这样做。 Web 是异步的,一旦您接受了这一点,您将学习如何使用现代 Web API 提高工作效率。
Doug Stevenson 写了一个非常有趣的post,可以帮助您更好地理解这个概念。
看起来你可以使用基于 Future
的 API,就像下面的行一样按顺序执行行,就好像它们是同步事件一样。
final documents = await Firestore.instance.document("/user/$_userId").collection('reviews').getDocuments();