问题描述
我想做什么:
在支付网关服务器中放置支付订单并将订单详细信息返回给客户端
使用firebase 云功能
Order()
执行异步工作并返回 function(err,data)
中的订单数据
我尝试了什么:
如您所见,我尝试使用 callback
机制来同步它,但该机制似乎不起作用。仍然返回 null。
index.js 代码
const functions = require("firebase-functions");
/* eslint-disable */
exports.order = functions.https.onCall((amnt,context) => {
var orderdata;
const Ippopay = require('node-ippopay');
var ippopay_instance = new Ippopay({
public_key: 'pk_live_0WZhCNC5l7PJ',secret_key: 'secret ;) ',});
function Order(callback){
ippopay_instance.createOrder({
amount: amnt,currency: 'DOLLAR',payment_modes: "cc,dc,nb",customer: {
name: "Test",email: "test@gmail.com",phone: {
country_code: "63",national_number: "5876543210"
}
}
},function (err,data) {
orderdata=data;
});
callback(orderdata);
}
return Order(function(order) {
//response.send(order);
return orderdata;
});
});
解决方法
ippopay_instance.createOrder()
内部的回调函数可以返回值,但调用该函数的代码不会关注返回值。
我尝试将您的 ippopay_instance.createOrder()
包装在 promise 中。
const functions = require("firebase-functions");
/* eslint-disable */
exports.order = functions.https.onCall((amnt,context) => {
const Ippopay = require("node-ippopay");
const ippopay_instance = new Ippopay({
public_key: "pk_live_0WZhCNC5l7PJ",secret_key: "secret ;) ",});
const param = {
amount: amnt,currency: "DOLLAR",payment_modes: "cc,dc,nb",customer: {
name: "Test",email: "test@gmail.com",phone: {
country_code: "63",national_number: "5876543210",},};
function getStuffAsync(param) {
return new Promise(function (resolve,reject) {
ippopay_instance.createOrder(param,function (err,data) {
if (err !== null) reject(err);
else resolve(data);
});
});
}
return getStuffAsync(param);
});