Javascript firebase云函数oncall返回null

Javascript firebase云函数oncall返回null,javascript,firebase,google-cloud-functions,Javascript,Firebase,Google Cloud Functions,想知道什么是奇怪的错误 我正在使用firebase云函数中的onCall方法,但当我从应用程序中读取它时,它返回null值。我试图返回一些测试数据,但它似乎不起作用。我是否返回了错误的数据 index.js exports.handleMassFollowAnalytics = functions.https.onCall((data, context) => { const brandArray = data.brandArray; const foll

想知道什么是奇怪的错误

我正在使用firebase云函数中的
onCall
方法,但当我从应用程序中读取它时,它返回
null
值。我试图返回一些测试数据,但它似乎不起作用。我是否返回了错误的数据

index.js


    exports.handleMassFollowAnalytics = functions.https.onCall((data, context) => {
      const brandArray = data.brandArray;
      const followed = data.followed;

      let done = 0;
      for (var i = 0; i < brandArray.length; i++) {
        let brand = brandArray[i];
        admin.database()
          .ref(`brands/${brand}/followers`)
          .transaction(function(post) {
              if (post !== null) {
                post--;
              }
              return post;
            },

            function(error, committed, snapshot) {
              done++;
              if (done === brandArray.length) {
                // returning result.
                return {
                  data: "testabc",
                };
              }
            }
          );
      }
    });


    const handleMassFollowAnalytics = firebase
      .functions()
      .httpsCallable("handleMassFollowAnalytics");
    handleMassFollowAnalytics({
      brandArray: array,
      followed: true,
    }).then((result) => {
      console.log("result: ", result) // returns null everytime
    });

    exports.handleMassFollowAnalytics = functions.https.onCall((data, context) => {
      const brandArray = data.brandArray;
      const followed = data.followed;

      var promises = [];
      for (var i = 0; i < brandArray.length; i++) {
        let brand = brandArray[i];
        promises.push(admin.database()
          .ref(`brands/${brand}/followers`)
          .transaction(function(post) {
              if (post !== null) {
                post--;
              }
              return post;
            });
        );
      }

      return Promise.all(promisess).then((result)=>{
          return {
              data: "testabc",
          }
      })
    });

您的函数需要返回一个承诺,该承诺与要发送给客户端的数据进行解析。现在,函数不返回任何内容。事务回调中的return语句不是从主函数返回的


此外,代码会忽略您正在执行的事务返回的承诺。函数返回的最终承诺必须在所有其他承诺解决后才能解决。

因此,我使用了Doug的信息,得出了以下答案,以供将来参考

这对我来说似乎是正确的

  • 回报个人承诺
  • 返回最终承诺
  • index.js

    
        exports.handleMassFollowAnalytics = functions.https.onCall((data, context) => {
          const brandArray = data.brandArray;
          const followed = data.followed;
    
          let done = 0;
          for (var i = 0; i < brandArray.length; i++) {
            let brand = brandArray[i];
            admin.database()
              .ref(`brands/${brand}/followers`)
              .transaction(function(post) {
                  if (post !== null) {
                    post--;
                  }
                  return post;
                },
    
                function(error, committed, snapshot) {
                  done++;
                  if (done === brandArray.length) {
                    // returning result.
                    return {
                      data: "testabc",
                    };
                  }
                }
              );
          }
        });
    
    
    
        const handleMassFollowAnalytics = firebase
          .functions()
          .httpsCallable("handleMassFollowAnalytics");
        handleMassFollowAnalytics({
          brandArray: array,
          followed: true,
        }).then((result) => {
          console.log("result: ", result) // returns null everytime
        });
    
    
        exports.handleMassFollowAnalytics = functions.https.onCall((data, context) => {
          const brandArray = data.brandArray;
          const followed = data.followed;
    
          var promises = [];
          for (var i = 0; i < brandArray.length; i++) {
            let brand = brandArray[i];
            promises.push(admin.database()
              .ref(`brands/${brand}/followers`)
              .transaction(function(post) {
                  if (post !== null) {
                    post--;
                  }
                  return post;
                });
            );
          }
    
          return Promise.all(promisess).then((result)=>{
              return {
                  data: "testabc",
              }
          })
        });
    
    exports.handleMassFollowAnalytics=functions.https.onCall((数据、上下文)=>{
    const brandArray=data.brandArray;
    const followed=data.followed;
    var承诺=[];
    对于(var i=0;i{
    返回{
    数据:“testabc”,
    }
    })
    });
    
    嘿,道格,谢谢你的回复。您认为有什么资源可以指导我这样做吗?对于非现场参考或教程的请求与堆栈溢出无关。通过网络搜索,你应该能够找到很多关于JavaScript编程的信息。似乎你已经为这个问题找到了答案。谢谢你给我指明了正确的方向。