同步函数中的Javascript等待异步响应
我想我的问题很简单,但我找了好几天也找不出来 这是我的实际情况: 我有一个表单,希望在将其提交到后端之前等待条带异步函数的返回,因为我需要条带API的响应。然后我使用同步函数中的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="
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;
}