我尝试使用Firestore的arrayUnion功能将项目添加到Array。 我有一个Web应用程序,下面的代码工作正常,并将元素添加到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
}
我想念什么吗?非常感谢!
答案 0 :(得分:0)
感谢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会清除所有过程。但是有一件事很奇怪:仅更新一个元素就可以正常工作,但是不能更新Array……这当然是由于更复杂的过程的执行时间:更新Array ... < / p>