我在JavaScript中进行了许多异步调用。我想确保在任何时候只有一个异步呼叫在飞行中。我怎样才能做到这一点?
Q库是否会暴露与此相关的内容?
答案 0 :(得分:1)
这取决于您是想保留所有通话还是放弃在飞行中进行的任何通话。
如果要保留所有呼叫,则不应直接进行Ajax呼叫,而应将其置于队列中。然后,队列抽象将负责进行Ajax调用,使用lock变量来检查是否已经在进行中。当收到或超时Ajax呼叫时,它可以触发队列检查是否有任何待处理的呼叫,以便可以关闭下一个呼叫。
如果你想放弃在飞行中进行的呼叫,可以使用简单的锁定机制。对于任何调用,只需检查锁是否为真,如果没有,则触发请求并将锁设置为true。如果锁定为真,则不执行任何操作(丢弃它)。收到电话或超时后清除锁定。
答案 1 :(得分:0)
我不是Q用户,但Q本质上是一个实现承诺的库,因此您可以通过将一系列.then子句链接在一起来确保这一点,每个子句包含一个调用,或者启动下一个调用以前的AJAX调用的.done操作。
答案 2 :(得分:0)
我能想到的是使用函数队列来根据jQuery.active的结果处理ajax函数,该函数计算活动的ashync调用。
因此,当调用ajax函数检查运行的活动ajax时,如果它是1则将函数添加到队列中,否则执行它。
然后,您可以使用ajaxStop函数触发在队列中调用的任何剩余函数,调用该函数并将其从队列中删除。
通过这种方式,您将确保运行单个ajax调用。这只是一些头脑风暴,我没有测试确切的行为,但这种方法可能会有所帮助。