javascript - 参数 "options"不是 Firestore 上的有效 SetOptions 错误

标签 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");
                }
            });
        });

});

错误日志

Error: Argument "options" is not a valid SetOptions. Input is not an object. at exports.(anonymous function) (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/src/validate.js:86:15) at Object.exports.(anonymous function) [as isOptionalSetOptions] (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/src/validate.js:91:35) at WriteBatch.set (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/src/write-batch.js:268:14) at DocumentReference.set (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/src/reference.js:425:8) at /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 at LLRBNode.inorderTraversal (/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/cjs/src/core/util/SortedMap.js:170:13) at LLRBNode.inorderTraversal (/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/cjs/src/core/util/SortedMap.js:169:27) at LLRBNode.inorderTraversal (/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/cjs/src/core/util/SortedMap.js:169:27) at LLRBNode.inorderTraversal (/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/cjs/src/core/util/SortedMap.js:169:27)

最佳答案

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

  • 数据:文档的字段和值的映射。
  • 选项:(可选)配置设置行为的对象。

您向它传递了两个参数,一个对象和一个函数。看起来您希望在发生错误时调用该函数,但这并不是文档所说的它的工作方式。您收到 API 的错误是您没有在可选的第二个参数中传递有效的选项对象。

如果您对 set() 操作的结果感兴趣,请注意它返回的 promise 。约定是在出现错误的情况下,promise 将被拒绝。如果您要编写 Cloud Functions 代码,您肯定需要熟悉 promises 的工作原理。

关于javascript - 参数 "options"不是 Firestore 上的有效 SetOptions 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48364161/

相关文章:

javascript - 在 React Native 中,是否可以在键盘打开时调用 onPress

node.js - electron sqlite3 未捕获错误 : Cannot find module

java - 尝试更新到最新 FirebaseUI 时 list 合并失败

java - 为什么我必须在用户登录后使用 firebase 对其进行身份验证?

android - 是否有必要从 Firebase 实时数据库中删除每个添加的监听器?

javascript - 是否可以使用具有统一(jquery 插件)的不同大小(宽度)的选择框?

javascript - Facebook 页面插件问题

javascript - 无法读取未定义的属性 'type' (react-router-redux)

node.js - 构建多人服务器的技术

node.js - Vue.js 和 Node.js - 我应该将图像上传到 vue(前端)还是 Node(后端)