Javascript 如何一次取消所有正在进行的承诺

Javascript 如何一次取消所有正在进行的承诺,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,设想一个工具通过该功能发出数百个请求(Promise): 函数发送(请求承诺、成功fn、失败fn){ 递增计数器(); 请求承诺() .then(response=>successFn(response.headers,response.data)) .catch(()=>failureFn()) .最后(()=>递减计数器()); } 现在,假设由于客户端达到API速率限制,联系的服务器决定拒绝所有后续请求 假设客户机希望停止等待所有请求:客户机如何使所有正在进行的承诺失败 因此,限制条件是

设想一个工具通过该功能发出数百个请求(
Promise
):

函数发送(请求承诺、成功fn、失败fn){
递增计数器();
请求承诺()
.then(response=>successFn(response.headers,response.data))
.catch(()=>failureFn())
.最后(()=>递减计数器());
}
现在,假设由于客户端达到
API速率限制
,联系的服务器决定拒绝所有后续请求

假设客户机希望停止等待所有请求:客户机如何使所有正在进行的承诺失败

因此,限制条件是:

  • 不应等待服务器的响应(不应执行
    then()
  • 取消应该触发
    catch()
    finally()
    调用
  • 即使是已排队但尚未触发服务器调用的
    承诺也应取消

更好的选择:确定费率限制,并将JS更改为永不超过it@CertainPerformance利率限制只是一个例子。服务器最终将错误发送回客户端的原因可能还有很多。例如:拒绝请求,因为“垃圾邮件”被认为是恶意的。并不是所有的API都提供适当的文档来确定这些类型的错误发生的条件,因此通过编程提前避免它们并不总是一种选择。(更不用说这些限制不是一成不变的,而且随着时间的推移可能会发生很大的变化。见鬼,它们甚至可能不是确定性的!)对于前两个限制,您可以使用共享限制,在每次取消后,共享限制将被替换为新限制。