我正在使用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/