Javascript 函数承诺在更改为异步后不返回任何内容

Javascript 函数承诺在更改为异步后不返回任何内容,javascript,node.js,express,paypal,promise,Javascript,Node.js,Express,Paypal,Promise,我正在使用paypal节点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); } });

我正在使用paypal节点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});
                });
            };
        };

这个库似乎支持承诺(feature:),但是当它是一个异步函数时,
cb(null,response)
实际上并没有返回任何东西。我错过什么了吗?有没有办法让它异步工作?

您需要beta/version 2.0+才能在sdk中使用承诺

不确定您的包装是什么,但是对于节点样式的回调
函数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);
      }
    }
  };
}
然后可由
constpayment=wait create(json)使用

然后在你的路由器中,你可以使用

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

您需要beta/Version2.0+才能在sdk中使用承诺

不确定您的包装是什么,但是对于节点样式的回调
函数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);
      }
    }
  };
}
然后可由
constpayment=wait create(json)使用

然后在你的路由器中,你可以使用

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

扩展Cody G.的答案

您需要升级到beta v2+以使用sdk中的承诺,这是正确的,尽管如果您希望这样做,升级后您会发现有突破性的更改

您可以在此处阅读完整的文档:

还有一个从v1到v2的迁移指南:


扩展Cody G.的答案。

您需要升级到beta v2+以使用sdk中的承诺,这是正确的,尽管如果您希望这样做,升级后您会发现有突破性的更改

您可以在此处阅读完整的文档:

还有一个从v1到v2的迁移指南:


只有beta版才有promise支持,您使用的是beta版(2.0+)@CodyG。1.8.1版本。。。我将改为2.0.0测试版,看看它是否有效。只有测试版有承诺支持,你在使用测试版(2.0+)@CodyG。1.8.1版本。。。我将改为2.0.0测试版,看看它是否有效。