参数“options”不是Firestore上的有效SetOptions错误

时间:2018-01-21 06:07:14

标签: javascript node.js firebase google-cloud-functions google-cloud-firestore

我正在尝试将我的实时数据库内容复制到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)

1 个答案:

答案 0 :(得分:1)

The API documentation for the set() method声明它需要两个参数:

  • data:文档的字段和值的映射。
  • options :(可选)用于配置设置行为的对象。

你传递了两个参数,一个对象和一个函数。您似乎希望在发生错误时调用该函数,但这不是文档如何说它有效。您在获取API时发现的错误是您未在可选的第二个参数中传递有效的选项对象。

如果您对set()操作的结果感兴趣,请注意它返回的承诺。惯例是,如果出现错误,将拒绝承诺。如果你要编写云功能代码,你肯定需要熟悉承诺的工作方式。