Jee*_*ane 3 firebase typescript google-cloud-functions google-cloud-firestore
我想使用在 Typescript 中键入的云函数更新 Firestore 中的地图,因此我编写了此代码,但它不起作用:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp(functions.config().firebase);
exports.sendNote = functions.https.onCall(async(data,context)=>{
const numeroSender: string = data['numeroSender'];
const amisA = admin.firestore().collection('Amis').doc(numeroReceiver);
const connaissanceABBA:number = 3.0;
const version:number = 1;
await amisA.update({
'amis.${numeroSender}' : [connaissanceABBA,version]
});
});
Run Code Online (Sandbox Code Playgroud)
编辑器不会用它的值替换 numeroSender,我也尝试过:
'amis.'+numeroSender
Run Code Online (Sandbox Code Playgroud)
并且编辑器正在询问分号并显示许多其他错误。甚至我也尝试过这种方式:
const mapA: string = ("amis."+numeroSender);
console.log(mapA);
await amisA.update({
mapA : [connaissanceABBA,version]
});
Run Code Online (Sandbox Code Playgroud)
控制台显示正确的字符串,但更新函数不读取 mapA 值,而是使用字符串 'mapA' 执行。
你可以做:
await amisA.update({
[`amis.${numeroSender}`] : [connaissanceABBA, version]
});
Run Code Online (Sandbox Code Playgroud)
在 ES6(因此也在 TypeScript 中)中,您可以使用ComputedPropertyName,如语言规范中所示:http : //www.ecma-international.org/ecma-262/6.0/#sec-object-initializer
请注意,在 ES5 中,您必须使用方括号表示法执行以下操作:
var obj = {};
obj[`amis.${numeroSender}`] = [connaissanceABBA, version];
amisA.update(obj);
Run Code Online (Sandbox Code Playgroud)
另请注意,这将按预期使用该update()
方法,因为“字段可以包含点以引用文档中的嵌套字段”。但是,JavaScript 代码中的结果对象可能并不完全符合您的预期。您可以通过执行以下操作来查看它:
var obj1 = {
[`amis.${numeroSender}`] : [connaissanceABBA, version]
}
console.log(JSON.stringify(obj1));
Run Code Online (Sandbox Code Playgroud)
`amis.${numeroSender}`
Run Code Online (Sandbox Code Playgroud)
而不喜欢:
'amis.${numeroSender}'
Run Code Online (Sandbox Code Playgroud)
如您的问题所示。
归档时间: |
|
查看次数: |
879 次 |
最近记录: |