我正在使用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});
});
};
};
该库似乎支持promises(功能:link),但是cb(null, response)
在它是异步函数时并没有真正返回任何内容。我想念什么吗?有没有办法使其异步工作?
答案 0 :(得分:3)
您需要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);
}
});
答案 1 :(得分:0)
扩展了Cody G的答案。
正确的是,您需要升级到Beta v2 +才能在sdk中使用promises,尽管如果您愿意这样做,则在升级后您会发现其中存在重大变化。
您可以在此处阅读完整的文档:
https://github.com/paypal/PayPal-node-SDK/tree/2.0-beta
还有一个迁移指南,可以轻松地从v1过渡到v2:
https://github.com/paypal/PayPal-node-SDK/blob/2.0-beta/docs/Migrating.md