因此,如果{promise}总是因为找不到文档(实际上还不存在)而失败,那有.exists()
的意义是什么。
match /conversations/{conversationId} {
allow read: if request.auth.uid in resource.data.participants
}
这将是查询(简约示例)
store.conversations
.doc( conversationId )
.get()
.then( async snapshot => {
if ( !snapshot.exists )
data = await dispatch( startConversation( participant ) )
}
.catch( console.err )
如果文档不存在,则该分派将永远不会触发,因为安全规则期望request.auth.uid
位于resource.data.participants
数组中,有时情况并非如此。
我想解决此问题的唯一方法是更改安全规则,以允许在文档不存在时进行读取。但这简直是违反直觉的。
match /conversations/{conversationId} {
function conversationExists(conversationId) {
return exists(/databases/$(database)/documents/conversations/$(conversationId))
}
allow read: if request.auth.uid in resource.data.participants || !conversationExists(conversationId)
}
我会在.catch()
中处理该问题,但是,我不知道这是文档丢失问题还是其他引起问题的原因(超时,网络问题,无论如何)。
在这种情况下,什么是最佳做法的任何线索?