每分钟将字段值增加 1
Posted
技术标签:
【中文标题】每分钟将字段值增加 1【英文标题】:Increase field value by 1 every minute 【发布时间】:2019-11-22 23:58:37 【问题描述】:我正在尝试将 Firestore 字段的值每分钟增加 1,因此我创建了一个预定的云函数:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
const db = admin.firestore();
const ref = db.collection('count').doc('currentTrack');
export const everyMinuteJob = functions.pubsub
.schedule('every 1 minutes').onRun(context =>
ref.get().then( value =>
if (value.exists)
const id = value.data().id + 1;
ref.update( id );
);
);
部署此代码我收到以下错误:
错误 TS2532:对象可能是“未定义”: const id = value.data().id + 1;
我已经尝试了多种方法,但它们总是在错误中解决。
这种行为的正确方法是什么?
【问题讨论】:
我为您的直接问题提供了答案,但您将遇到另一个问题,即您没有处理ref.update()
返回的承诺。这个问题与你现在面临的问题无关,但它仍然是一个问题。
@DougStevenson 谢谢,我会仔细阅读!
【参考方案1】:
value
将是一个DocumentSnapshot 类型的对象。根据 API 文档,它的 data() 方法可以返回 DocumentData 或未定义。为了满足严格的 TypeScript 检查,您必须检查未定义的情况才能使用返回的 DocumentData 对象。 value.event 之前是否返回 true 无关紧要 - TypeScript 不会在 exists
属性和 data()
的返回值之间建立任何联系。
if (value.exists)
const data = value.data();
if (data)
// now TypeScript has a guarantee that data is not undefined
const id = value.data().id + 1;
ref.update( id );
【讨论】:
谢谢!还必须将const id = value.data().id + 1;
更改为const id = data.id + 1;
,但我假设您完全忘记了这一点。另一个奇怪的事情是,初始字段值是 1 - 现在我通过云函数添加 1 (+ 1
) - 它是 11。
那是因为您将 1 附加到字符串值。 id 必须是数字,而不是字符串。以上是关于每分钟将字段值增加 1的主要内容,如果未能解决你的问题,请参考以下文章