我在云函数中有一个函数,它从我的flutter应用程序中提取用户电子邮件,我想将其传递给一个函数,该函数在从外部客户端发布时使用用户电子邮件来创建firestore文档,以便我可以将数据存储在firestore中特定用户的文档中。我是javascript新手,我正在使用云函数来运行我的flutter应用程序的后端代码。
我尝试过使用全局变量,但我一直在exports.mpesa函数中获取未定义的存储值,但在exports.getUser函数中,它会更新。任何帮助都将不胜感激。
这是我的index.js文件的样子
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函数,如下所示
await FirebaseFunctions.instance.httpsCallable('getUser').call(loggedInUser.email);包(https://pub.dev/packages/mpesa_flutter_plugin)将数据发送到get.mpesa函数的回调URL
输出中的日志如下所示
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'发布于 2021-11-01 12:38:11
您有几个选项可以选择如何继续执行此操作。你不能真的简单地调用另一个这样的云函数。
从“云函数”中分离出你的代码逻辑
这意味着将您的代码放入单独的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。
// for example a GET function
fetch("https://us-east4-your-project-prod.cloudfunctions.net/myFunction?data=mydata")或者你可以使用POST请求...
但是在你的例子中,我只是将我的代码逻辑移动到单独的JavaScript函数中,并为这个函数有两个触发器。一个可能是外部触发器,第二个可能来自应用程序。两个云函数都会执行一些“逻辑”,然后调用最终的javascript函数来保存数据。
https://stackoverflow.com/questions/69790795
复制相似问题