我正在尝试在NodeJS管理SDK中将时间戳从Firestore转换为Date对象。但是我总是得到这样的错误,即toDate()不是一个函数。为什么?如何在admin SDK中将时间戳转换为Date对象??
这是我尝试过的代码。
this.getService.sample()
.then(doc => {
const callable = this.fns.httpsCallable('myTestFn');
const data$ = callable({ text: 'google', arraySize: 10, date: doc.data().date });
data$.toPromise()
.then(e1 => {
console.log(e1);
}).catch(err => {
console.log(err);
})
});
onCall函数:
const original = data.text;
const arraySize: number = data.arraySize;
if (arraySize > 100) {
// Throwing an HttpsError so that the client gets the error details.
throw new functions.https.HttpsError('unknown', 'invalid request,input is above the permistted range!');
}
const date = data.date.toDate();
console.log('--- This is the date---', date);
const numberArray = [];
for (let i = 1; i <= arraySize; i++) {
await numberArray.push(i);
}
const sum = await numberArray.reduce((acc, curr) => acc + curr, 0);
console.log('-----------sum-------------', sum)
const writeResult = await admin.firestore().collection('messages').add({ original: original,sum, createdAt: admin.firestore.FieldValue.serverTimestamp() });
return { wish: 'A wish from function', original, writeResult: writeResult.id, numberArray, sum };
答案 0 :(得分:0)
在将值从客户端传递到服务器时,可调用函数不保留数据类型。当您将date: doc.data().date
传递给函数时,您可能在客户端上传递了一个Timestamp类型的对象,但是它不会在函数中显示为Timestamp类型的对象。它可能显示为该时间戳记的序列化版本,它将只是一个具有秒和纳秒两个属性的对象。如果要将该对象视为时间戳记,则必须手动将该对象转换为一个。