同步函数中的Javascript等待异步响应

同步函数中的Javascript等待异步响应,javascript,forms,wait,synchronous,Javascript,Forms,Wait,Synchronous,我想我的问题很简单,但我找了好几天也找不出来 这是我的实际情况: 我有一个表单,希望在将其提交到后端之前等待条带异步函数的返回,因为我需要条带API的响应。然后我使用onsubmit=“return validate_form();”> 标记,以便自己在javascript函数中管理它 <form action="/" method="get" id="test" onsubmit="return validate_test_form();"> <button type="

我想我的问题很简单,但我找了好几天也找不出来

这是我的实际情况:

我有一个表单,希望在将其提交到后端之前等待条带异步函数的返回,因为我需要条带API的响应。然后我使用
onsubmit=“return validate_form();”>
标记,以便自己在javascript函数中管理它

<form action="/" method="get" id="test" onsubmit="return validate_test_form();">
  <button type="submit" id="iban-test" data-secret="">
    TEST
  </button>
</form>
作为一种正常行为,表单提交时不等待条带响应,因为条带函数是异步的,并且默认的
validate\u test\u表单
函数返回为true。我知道async/await/promise概念,但不知道如何使用它们来等待(块UI,带有微调器或其他)作为同步行为响应条带

我想这种情况必须是当前的,而且必须有很多方法来实现我所寻找的。无论哪种方式,您能告诉我在这种情况下的最佳实践是什么吗


非常感谢您的时间。

您需要立即从
validate\u test\u form()
返回
false
(这将取消提交操作),并在Stripe的响应可用时提交表单

由于
confirmCardSetup
返回一个
Promise
,因此它不会阻止函数的执行。相反,您可以在Promise返回结果后使用
。然后(func)
执行代码


函数验证\测试\表单(){
var stripe_result=stripe.confirmCardSetup(clientSecret)
条带结果。然后(函数(条带结果){
//在这里隐藏进度条
如果(条带\u结果错误){
//做事
}否则{
//做其他事情
//重新提交表单或使用“stripe\u result.setupIntent”(如果需要)。
}
});//这将立即返回,因此我们可以继续。
//在这里显示一个进度条或其他什么
返回false;
}

您可以通过执行
event.preventDefault()
截获提交事件,然后在异步操作完成后自己手动提交表单。使用
event.preventDefault()
如下所示:
,它可以工作。感谢各位解决我的问题,我想知道什么应该是最好的做法,谢谢大家抽出时间。有人有进度条的实际例子吗?
function validate_test_form() {
  var stripe_result = stripe.confirmCardSetup(clientSecret)

  if (stripe_result.error) {
    // do things
  } else {
    // do other things
  }
  return true;
}