Firestore FieldValue.arrayUnion не работает в облачной функции - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь использовать функцию arrayUnion в Firestore для добавления элементов в массив.У меня есть веб-приложение, и код ниже работает нормально, и элементы добавляются в MyArray:

firebase.firestore().collection("MyCollection").doc("MyDocument").update({
     MyArray: firebase.firestore.FieldValue.arrayUnion({element1: "qqq", element2: "www"})
});

Но когда я пытаюсь заставить его работать в облачной функции, код ничего не делает.Ничего не написано в моем массиве Firestore, и нет ошибок в журналах облачных функций.

Инициализация:

const admin = require('firebase-admin');
admin.initializeApp();

Моя облачная функция имеет триггер HTTP, который работает нормально.Код в облачной функции:

admin.firestore().collection("MyCollection").doc("MyDocument").update({
     MyArray: admin.firestore.FieldValue.arrayUnion({element1: "qqq", element2: "www"})
});

Тот же код с добавленным простым элементом, в той же облачной функции, запускаемой по HTTP, работает нормально:

admin.firestore().collection("MyCollection").doc("MyDocument").update({
     element1: "qqq"
});

Кажется, что admin.firestore.FieldValue.arrayUnion ничего не делает.

Полная облачная функция развернута нормально:

exports.test = functions.https.onRequest((req, res) => {
   admin.firestore().collection("MyCollection").doc("MyDocument").update({

       MyArray: admin.firestore.FieldValue.arrayUnion({element1: "qqq", element2: "www"})

   });
   res.status(200).end();
});

Это мой файл package.json, все пакеты обновлены:

{
   "name": "functions",
   "description": "Cloud Functions for Firebase",
   "scripts": {
   "serve": "firebase serve --only functions",
   "shell": "firebase experimental:functions:shell",
   "start": "npm run shell",
   "deploy": "firebase deploy --only functions",
   "logs": "firebase functions:log"
},
"dependencies": {
   "@google-cloud/storage": "^1.7.0",
   "admin": "^1.4.0",
   "firebase": "^5.5.9",
   "firebase-admin": "^6.2.0",
   "firebase-functions": "^2.1.0",
   "firestore": "^1.1.6",
},
"private": true
}

Я что-то упустил?Большое спасибо!

1 Ответ

0 голосов
/ 23 ноября 2018

Благодаря Renaud и Doug, он отлично работает с Promise:

exports.test = functions.https.onRequest((req, res) => {

return admin.firestore().collection("MyCollection").doc("MyDocument").update({

    MyArray: admin.firestore.FieldValue.arrayUnion({
        element1: "qqq",
        element2: "www"
    })

   }).then(() => {
    console.log('Write succeeded!');
    res.status(200).end();
   });

});

Функция очистки убивала все, и я не думал, что отправка статуса 200 очищает весь процесс.Но странно одно: обновление только одного элемента работает нормально без обещания, но обновление массива не работает ... Это, безусловно, связано со временем выполнения более сложного процесса: обновление массива ...

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