Как обновить карту в Firestore в cloudFunction с кодом TypeScript - PullRequest
0 голосов
/ 10 июня 2019

Я хочу обновить карту в Firestore, используя облачную функцию, набранную в Typescript, поэтому я создал этот код, но он не работает:

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]
        });
});

редактор не заменяет NumberroSender его значением, и я попытался также с:

'amis.'+numeroSender

и редактор запрашивает точку с запятой и показывает много других ошибок. Даже я пытался попробовать так:

const mapA: string = ("amis."+numeroSender);
console.log(mapA);
await amisA.update({
            mapA : [connaissanceABBA,version]
        });

консоль показывает правильную строку, но функция обновления не читает значение mapA, а выполняется со строкой 'mapA'.

1 Ответ

1 голос
/ 10 июня 2019

Вы можете сделать:

await amisA.update({
      [`amis.${numeroSender}`] : [connaissanceABBA, version]
});

В ES6 (и, следовательно, в TypeScript) вы можете использовать ComputedPropertyName , как показано в спецификации языка: http://www.ecma -international.org / ecma-262 / 6.0 / # sec- объект-инициализатор


Обратите внимание, что в ES5 вам нужно будет сделать следующее, используя обозначения в квадратных скобках:

var obj = {};
obj[`amis.${numeroSender}`] = [connaissanceABBA, version]; 
amisA.update(obj);

Также обратите внимание, что это будет работать, как и ожидалось, с помощью метода update(), поскольку «поля могут содержать точки для ссылки на вложенные поля в документе». Однако результирующий объект в коде JavaScript может быть не совсем тем, что вы ожидаете. Вы можете увидеть это, выполнив:

var obj1 = {
          [`amis.${numeroSender}`] : [connaissanceABBA, version]
    }
console.log(JSON.stringify(obj1));

Наконец, обратите внимание, что литералы шаблона заключены в обратные галочки, например:

`amis.${numeroSender}`

а не как:

'amis.${numeroSender}'

как показано в вашем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...