我正在使用paypal-node-SDK库来调用Paypal API。它使用如下承诺:

paypal.payment.create(create_payment_json, function (error, payment) {
    if (error) {
        throw error;
    } else {
        console.log("Create Payment Response");
        console.log(payment);
    }
});


但是我正在尝试将其设置为async,因为我的其他功能也是async/await。但是它不返回任何回调,只是未定义。

        exports.create = wrap(async(req, res) => {
            const payment = await paypal.payment.create(create_payment_json);
        });
        //wrap
        module.exports = (fn) => {
        return (req, res, next) => {
            Promise.resolve(fn(req, res, next))
                .catch((error) => {
                    console.log(error);
                    res.status(400).send({success: false, message: error.message});
                });
            };
        };


该库似乎支持promise(功能:link),但是当cb(null, response)是异步函数时,它实际上不返回任何内容。我想念什么吗?有没有办法使其异步工作?

最佳答案

您需要beta / 2.0 +版才能在SDK中使用Promise。

不确定确切的包装内容是什么,但是对于节点样式的回调function foo(a,b,callback),您可以使用promisify

    const { promisify } = require('util');
    exports.create = promisify(paypal.payment.create);


手动转换paypal.payment.create将是

function create(create_payment_json){
  return new Promise(function(resolve,reject){
    paypal.payment.create(create_payment_json,function(error,payment){
      if(error){
       reject(error);
      }else{
       resolve(payment);
      }
    }
  };
}


然后可以由const payment = await create(json);使用

然后,您可以在路由器中使用类似

router.get('/', async function (req, res, next) {
  try{
    const payment = await create(json);
    res.send(payment);
  }catch(e){
    console.log(e);
  }
});

关于javascript - 功能 promise 更改为异步后不返回任何内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53638034/

10-11 13:09