Java脚本回调不同步

问题描述

我想做什么:

在支付网关服务器中放置支付订单并将订单详细信息返回给客户端

使用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);
});