我只是想在我的firebase可调用函数之一中获取文档的数据,我已经从上一个查询中知道了它的ID。
问题是来自[...].doc(id).get()
方法的结果对象没有.data()
方法或exists
成员。
我尝试使用Object.getOwnPropertyNames(snapshot);
列出对象的属性,但找不到exists
或data()
。
使用ref
获取文档参考,但我无权访问其他方法/成员。
这是我使用两个查询(请注意console.log调用)获取数据的方式:
return firestore.collection("/teams").where("login", "==", data.login).get()
.then( (snapshot) => {
if(!snapshot.empty) {
user = snapshot.docs[0].data().login;
id = snapshot.docs[0].id;
console.log(snapshot.docs);
return firestore.collection("/passwords").doc(id).get();
} else {
return {
success: false,
error: 2
};
}
})
.then((snapshot) => {
console.log(snapshot);
if(snapshot.hasOwnProperty("exists") && snapshot.exists) {
return bcrypt.compare(data.password, snapshot.data().password);
} else {
return {
success: false,
error: 2
};
}
})
这是我第一个console.log的输出(为了节省空间,我已经切断了验证器部分):
[ QueryDocumentSnapshot {
_ref:
DocumentReference {
_firestore: [Object],
_validator: [Object],
_referencePath: [Object] },
_fieldsProto:
{ colour: [Object],
name: [Object],
teammates: [Object],
login: [Object] },
_serializer:
Serializer {
timestampsInSnapshotsEnabled: true,
createReference: [Function] },
_validator:
Validator {
... },
_readTime: Timestamp { _seconds: 1553530847, _nanoseconds: 875308000 },
_createTime: Timestamp { _seconds: 1553530458, _nanoseconds: 66673000 },
_updateTime: Timestamp { _seconds: 1553530458, _nanoseconds: 66673000 } } ]
这是第二个console.log的输出:
QueryDocumentSnapshot {
_ref:
DocumentReference {
_firestore:
Firestore {
_validator: [Object],
_clientPool: [Object],
_settingsFrozen: true,
_clientInitialized: [Object],
_initalizationSettings: [Object],
_serializer: [Object],
_timestampsInSnapshotsEnabled: true,
_referencePath: [Object],
_preferTransactions: true,
_lastSuccessfulRequest: 1553530848171 },
_validator:
Validator {
... },
_referencePath:
ResourcePath {
segments: [Array],
projectId: 'rally-gccd',
databaseId: '(default)' } },
_fieldsProto:
{ password:
{ stringValue: '$2b$10$Xy1fCI.mKxvBhCHGimNqK.mPGU4lb1p.6pQgqacnnAUYjPomIWyaa',
valueType: 'stringValue' } },
_serializer:
Serializer {
timestampsInSnapshotsEnabled: true,
createReference: [Function] },
_validator:
Validator {
... },
_readTime: Timestamp { _seconds: 1553530848, _nanoseconds: 114930000 },
_createTime: Timestamp { _seconds: 1553530458, _nanoseconds: 341760000 },
_updateTime: Timestamp { _seconds: 1553530458, _nanoseconds: 341760000 } }
奇怪的是,我可以在第一个快照上使用.data()很好,但是在第二个快照上不存在。即使两个日志都表明两个快照都是QueryDocumentSnapshot类型。
答案 0 :(得分:0)
我通过将第二个文档get Promise嵌套在第一个文档查询Promise中来解决此问题。这不是理想的,因为它有点凌乱,但至少可以正常工作。