我知道有很多关于异步编程和 Promise 的问题,但我真的需要一个包含这个特定代码的示例来弄清楚我应该如何返回在另一个函数中返回的 Promise。
我有两个功能。第一个在获取路由时调用。此路线应创建付款链接并将预订保存到数据库。
exports.create_booking = function(req, res) {
req.body.payment = exports.create_booking_payment(req.body.total_amount);
console.log(req.body.payment); // This returns ' Promise { <pending> } '
var new_booking = new Booking(req.body);
new_booking.save(function(err, booking) {
if (err)
res.send(err);
res.json(booking);
});
};
Run Code Online (Sandbox Code Playgroud)
然而,创建支付链接是通过异步方法进行的。我的第一个问题是我只能在方法回调函数中访问付款。
现在我已将该方法包装在另一个(异步)方法中,在该方法中创建并解析了 Promise。这个方法通过 await 语句返回到我的第一个方法,但所有这些返回的是:'Promise {}'。
我知道发生这种情况是因为在解决承诺之前返回了该方法。但我不明白这是为什么。我的假设是“await”语句确保在异步函数完成之前等待返回方法。
exports.create_booking_payment = async function() {
function asyncPayment() {
return new Promise (function(resolve, reject) {
mollie.payments.create({
amount: 20.00,
description: "Reservation code: ",
redirectUrl: "https://www.website.com/",
webhookUrl: ""
}, function(payment) {
if (payment.error) reject(payment.error)
else { resolve({
id: payment.id, …Run Code Online (Sandbox Code Playgroud)