我这里有一个有趣的问题...
我将official documentation用于Firestore事件
从那里我得到了这段代码,以便进行测试和玩转。
exports.countNameChanges = functions.firestore
.document('users/{userId}')
.onUpdate((change, context) => {
// Retrieve the current and previous value
const data = change.after.data();
const previousData = change.before.data();
// We'll only update if the name has changed.
// This is crucial to prevent infinite loops.
if (data.name == previousData.name) return null;
// Retrieve the current count of name changes
let count = data.name_change_count;
if (!count) {
count = 0;
}
// Then return a promise of a set operation to update the count
return change.after.ref.set({
name_change_count: count + 1
}, { merge: true });
});
加上我已经放入的那些进口物品(也许我会错过其中一个)
import * as functions from 'firebase-functions';
import * as Storage from '@google-cloud/storage';
const gcs = new Storage.Storage();
我认为一切看起来都很好,但我收到此错误消息:
src/index.ts:33:13 - error TS2532: Object is possibly 'undefined'.
33 if (data.name == previousData.name) return null;
~~~~
src/index.ts:33:26 - error TS2532: Object is possibly 'undefined'.
33 if (data.name == previousData.name) return null;
~~~~~~~~~~~~
src/index.ts:36:21 - error TS2532: Object is possibly 'undefined'.
36 let count = data.name_change_count;
~~~~
这是怎么回事?我在这里想念的是什么?有谁知道我在做什么错并且可以帮助我?我当时认为文档中的所有内容都应该可以正常工作。
答案 0 :(得分:0)
实际上,这是工作代码,唯一抱怨的是您的短毛绒。
实际上,问题在于onUpdate
在创建,更新或删除文档时触发,因此如果删除文档,则change.after.data()
可能未定义,这就是linter抱怨的原因。
如果您的意图开始,我建议您在抱怨的任何行的顶部都使用// @ts-ignore
,然后在您感到更自在时,可以进行更多的调查,这种情况是为了进行验证确保您正在执行该行,如:
if (previousData && data.name == previousData.name) return null;