首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据从一个导出函数传递到另一个导出函数?

如何将数据从一个导出函数传递到另一个导出函数?
EN

Stack Overflow用户
提问于 2021-10-31 21:38:00
回答 1查看 86关注 0票数 1

我在云函数中有一个函数,它从我的flutter应用程序中提取用户电子邮件,我想将其传递给一个函数,该函数在从外部客户端发布时使用用户电子邮件来创建firestore文档,以便我可以将数据存储在firestore中特定用户的文档中。我是javascript新手,我正在使用云函数来运行我的flutter应用程序的后端代码。

我尝试过使用全局变量,但我一直在exports.mpesa函数中获取未定义的存储值,但在exports.getUser函数中,它会更新。任何帮助都将不胜感激。

这是我的index.js文件的样子

代码语言:javascript
复制
const functions = require("firebase-functions");
const admin = require('firebase-admin');
admin.initializeApp();
let loggedInUser;

function convertTZ(date, tzString) {
 return new Date((typeof date === "string" ? new Date(date) : date).toLocaleString("en-US", {timeZone: tzString}));   
}

exports.getUser = functions.https.onCall((data) => {
 console.log(loggedInUser); 
 loggedInUser = data;
 console.log(loggedInUser);
});

exports.mpesa = functions.https.onRequest((request, response) => {
  try{
   let date_ob = Date();
   const data = request.body;
   const date = convertTZ(date_ob,"Africa/Nairobi");
   prettydata = JSON.parse(JSON.stringify(data));
   console.log("Mpesa info");
   console.log(loggedInUser);
   functions.logger.info(data);
   console.log("Done1");
   functions.logger.info(prettydata.Body.stkCallback.ResultCode);
   console.log("Done2");
   admin.firestore().collection('transactions').doc(`${date}`).set(data);
   admin.firestore().collection('transactions').doc(`${loggedInUser}`).set(data);
   console.log("Done3");
  }
  catch(e){
   functions.logger.info(e);
  }
});

我在flutter上调用getUser函数,如下所示

代码语言:javascript
复制
await FirebaseFunctions.instance.httpsCallable('getUser').call(loggedInUser.email);

包(https://pub.dev/packages/mpesa_flutter_plugin)将数据发送到get.mpesa函数的回调URL

输出中的日志如下所示

代码语言:javascript
复制
getUser
Function execution started
12:05:55.673 am
getUser
Callable request verification passed
12:05:55.674 am
getUser
undefined
12:05:55.674 am
getUser
edward@mmw.co.ke
12:05:55.755 am
getUser
Function execution took 1489 ms, finished with status code: 200
12:06:03.373 am
mpesa
Function execution started
12:06:03.593 am
mpesa
Mpesa info
12:06:03.673 am
mpesa
undefined
12:06:03.674 am
mpesa
{"Body":{"stkCallback":{"ResultCode":1032,"ResultDesc":"Request cancelled by user","MerchantRequestID":"22982-12102077-1","CheckoutRequestID":"ws_CO_011120210005554833"}}}
12:06:03.674 am
mpesa
Done1
12:06:03.674 am
mpesa
1032
12:06:03.674 am
mpesa
Done2
12:06:06.105 am
mpesa
Done3
12:07:03.375 am
mpesa
Function execution took 60003 ms, finished with status: 'timeout'
EN

回答 1

Stack Overflow用户

发布于 2021-11-01 12:38:11

您有几个选项可以选择如何继续执行此操作。你不能真的简单地调用另一个这样的云函数。

从“云函数”中分离出你的代码逻辑

这意味着将您的代码放入单独的JavaScript函数中,然后从云函数中调用该代码。

代码语言:javascript
复制
function A(...){
//...
}

exports.getUser = functions.https.onCall((data) => {
  // ... call function A
  A(...)
});

function B(){
 // ...
}

exports.mpesa = functions.https.onRequest((request, response) => {
  // ... call function B
  B(...)
  // And in case we want to call the logic from function A we can again call it here
  A(...)
});

2.分离云函数并触发另一个函数

您可以通过多种方式触发另一个云函数。如果你想让它作为onRequest函数,你可以从另一个函数调用函数url。

代码语言:javascript
复制
// for example a GET function
fetch("https://us-east4-your-project-prod.cloudfunctions.net/myFunction?data=mydata")

或者你可以使用POST请求...

但是在你的例子中,我只是将我的代码逻辑移动到单独的JavaScript函数中,并为这个函数有两个触发器。一个可能是外部触发器,第二个可能来自应用程序。两个云函数都会执行一些“逻辑”,然后调用最终的javascript函数来保存数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69790795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档