0

我正在为我的网站制作支付网关,但我的调试器有问题。即使我已经使用async了等待,即使某些特定的行是异步执行的,但是当另一个函数出现时它会运行同步。为了更好地理解,请查看下面提到的实际代码

这是我的 app.js 文件

app.post('/pay', 异步函数(req,res){

let response = await orderApi.pay(req.body)  // First debugger goes here (1)
res.json(response)  // (need this line to be executed when pay function is completed) (4)
console.log(response)

这是我的订单 API 文件

exports.pay = async function (body) {
  var headers = { //then here debugger comes (2)
    'X-Api-Key': 'test_d5f178f6f910a5ec48a429d540d',
    'X-Auth-Token': 'test_f3f32cda3a7aafc2a188579530f'
  }
 

  var payload = {
    purpose: body.purpose,
    amount: body.amount,
    phone: body.phone,
    buyer_name: body.buyer_name, 
   
  }
  request.post('https://test.instamojo.com/api/1.1/payment-requests/', { form: payload, headers: headers }, function (error, response) { // (3) !!!
       var parsed = JSON.parse(response.body); // then it does not goes here then it goes back in app.js file (5)
      var redirectu = parsed.payment_request.longurl (6)
      return redirectu
   
  })
}

我不明白是什么问题,请帮我弄清楚//记住点(1),(2)..它们是我的调试器所在的数字

4

1 回答 1

0

您可能想要返回返回的内容,request.post这意味着我们应该将代码修改为如下所示:

const response = await request.post('https://test.instamojo.com/api/1.1/payment-requests/', { form: payload, headers: headers });
const parsed = JSON.parse(response.body);
const redirectu = parsed.payment_request.longurl(6);
return redirect;

解释

内部return回调request.post在函数已经完成执行后返回,并且由于外部函数中没有显式返回,它只是调用request.post并(隐式)返回undefined而不等待request.post完成执行。

于 2021-11-21T09:29:00.823 回答