我有一个Firebase函数,它从Firestore中检索一些数据。我可以向客户端显示除日期之外的所有信息,这些日期作为空对象返回给客户端。
Firebase功能:
exports.getPosts = functions.https.onCall(async (data, context) => {
.....
const querySnapshot = await db.collection("posts").get();
var posts = querySnapshot.docs.map(doc => ({
id: doc.id,
author: doc.data().author,
message: doc.data().message,
lastChangeDate: doc.data().lastChangeDate.toDate(),
}));
console.log(posts);
return posts;
.....
我还使用toDate((将lastChangeDate从Timestamp转换为Javascript对象日期。控制台.log显示:
{
id: 'doc id',
author: 'Bill',
message: 'blah blah',
lastChangeDate: 2021-04-24T08:03:01.024Z
}
客户端:
然后,在我的客户端中,我尝试在调用firebase函数后检索数据,但我得到了一个仅用于lastChangeDate的空对象。
const snapshot = firebase.functions().httpsCallable("getPosts");
var doc = await snapshot();
var array = doc.data.map(item => ({
id: item.id,
author: item.author,
message: item.message,
lastChangeDate: item.lastChangeDate,
}));
console.log(array);
控制台.log显示:
{id: "xxxxxxxxxx", author: "Bill", message: "blah blah", lastChangeDate: {…}}
author: "Bill"
id: "xxxxxxxxxx"
lastChangeDate: Object
__ob__: Observer {value: {…}, dep: Dep, vmCount: 0}
__proto__: Object**
message: "blah blah"
....
正如您所看到的,lastChangeDate作为一个空Object返回到客户端,我无法正确显示Date并将其解析为任何格式。
我的代码出了什么问题?请帮助
Firebase Function中的lastChangeDate
无法进行JSON编码,因此您应该自己将lastChangeDate: doc.data().lastChangeDate.toDate(),
更改为lastChangeDate: doc.data().lastChangeDate.toDate().toJSON()
,并在客户端上解析该日期字符串。