页面中有两个按钮,A和B,点击的话分别会发送ajaxA和ajaxB,
有这样的bug,点击A后,没有返回之前,去点击B,返回B,这是A也返回了,容易造成混乱,
这个问题能用promise解决吗,能的话怎么解决呢;看过别人的代码但是在没明白是怎么回事;
var promise = Promise.resolve();
$('.btn1').click(()
=>
{
promise = promise.then(()
=>
{
return new Promise((reslove)
=>
{
$.ajax({url: 'url1', success(res1)
{
$('.input').val(res1);
reslove();
}
})
;
}
)
;
}
)
;
}
)
;
$('.btn2').click(()
=>
{
promise = promise.then(()
=>
{
return new Promise((reslove)
=>
{
$.ajax({url: 'url2', success(res2)
{
$('.input').val(res2);
reslove();
}
})
;
}
)
;
}
)
;
}
)
;
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我用setTimeout模拟异步、试一下这段代码
看上去就是声明了一个全局的
promise对象,btn.click的时候会用全局对象promise的then执行本来click要做的事情,并更新全部promise。这样你按钮点击就会形成一个promise链,应该能解决你的问题。可以用RxJs,虽然以前也没用过,但在知乎看见类似问题的时候查了一下,感觉很符合这个需求。而且更容易扩展,防止ajax请求出错,时间过长对程序的影响
知乎中的类似问题
promise的话没怎么用过,直接想到了aynsc,await,正在尝试...
不知道你要的是不是点击两个按钮,只需要最先返回的那个的结果,如果是这样的话可以试试
Promise.race()
你可以理解为逐一向 promise 里面添加步骤。
promise 是按顺序执行的,每一个 then 在执行完之后才会执行后面的 then