我正在尝试将我的实时数据库内容复制到firestore。但是当我使用set函数时,我收到了这个错误。
exports.copyPosts = functions.https.onRequest((req, res) => {
var i = 0;
var username;
db.ref("feeds").child("all").limitToLast(2000).once("value", function (postSnap) {
console.log(postSnap.numChildren());
postSnap.forEach(function(topic){
i = i + 1;
console.log(topic.key);
firestore.collection("topics").doc("all").collection(i+"").set({
caption: topic.child("caption").val(),
time: topic.child("time").val(),
username: topic.child("username").val(),
category: topic.child("category").val(),
pic: topic.child("pic").val()
},function(error) {
if (error) {
alert("Data could not be saved." + error);
} else {
alert("Data saved successfully.");
}
});
if(postSnap.numChildren()==i){
res.contentType('application/json');
res.status(200).send("Success");
}
});
});
});
错误记录
错误:参数“options”不是有效的SetOptions。输入不是 宾语。 at exports。(匿名函数)(/ user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/src/validate.js:86:15) at Object.exports。(匿名函数)[as isOptionalSetOptions](/ user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/src/validate.js:91:35) 在WriteBatch.set(/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/src/write-batch.js:268:14) 在DocumentReference.set(/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/src/reference.js:425:8) 在/user_code/index.js:2172:47 at /user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/cjs/src/api/DataSnapshot.js:126:20 在LLRBNode.inorderTraversal(/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/cjs/src/core/util/SortedMap.js:170:13) 在LLRBNode.inorderTraversal(/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/cjs/src/core/util/SortedMap.js:169:27) 在LLRBNode.inorderTraversal(/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/cjs/src/core/util/SortedMap.js:169:27) 在LLRBNode.inorderTraversal(/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/cjs/src/core/util/SortedMap.js:169:27)
答案 0 :(得分:1)
The API documentation for the set() method声明它需要两个参数:
你传递了两个参数,一个对象和一个函数。您似乎希望在发生错误时调用该函数,但这不是文档如何说它有效。您在获取API时发现的错误是您未在可选的第二个参数中传递有效的选项对象。
如果您对set()操作的结果感兴趣,请注意它返回的承诺。惯例是,如果出现错误,将拒绝承诺。如果你要编写云功能代码,你肯定需要熟悉承诺的工作方式。