JavaScript:setTimeOut在另一个setTimeOut(嵌套的setTimeOut)中,以刺激API响应不工作

JavaScript:setTimeOut在另一个setTimeOut(嵌套的setTimeOut)中,以刺激API响应不工作,javascript,jquery,angular,mocking,settimeout,Javascript,Jquery,Angular,Mocking,Settimeout,要求:用户无延迟地连续扫描文本框中的作业编号。对于每个工号,我需要在后台调用API以获取扫描工号的详细信息 我所做的: 我编写了一个小的模拟代码来激发这个需求。 我正在延迟用户扫描和延迟API响应以及设置超时 问题: 延迟扫描正常,但延迟API响应无效 jsbin链接 请运行以下代码并检查控制台 var数据集=[10,20,30]; 无功延迟=100; var-apiDelay=3000; 函数执行(数据集){ var i=0; scannedJob(数据集,i); } //第一次超时法//

要求:用户无延迟地连续扫描文本框中的作业编号。对于每个工号,我需要在后台调用API以获取扫描工号的详细信息

我所做的: 我编写了一个小的模拟代码来激发这个需求。 我正在延迟用户扫描和延迟API响应以及设置超时

问题: 延迟扫描正常,但延迟API响应无效

jsbin链接

请运行以下代码并检查控制台

var数据集=[10,20,30];
无功延迟=100;
var-apiDelay=3000;
函数执行(数据集){
var i=0;
scannedJob(数据集,i);
}
//第一次超时法//
函数scannedJob(数据集,i){
setTimeout(函数(){
log(“扫描的作业编号=“+dataset[i]”+“@time=“+new Date().toLocaleTimeString());
fireJobSearchHttpAPI1(数据集[i]);
i++;
如果(dataset.length>i){
self.scannedJob(数据集,i);
}否则{
i=0;
}
},延误);
}
//第二次超时方法//
/*我写的两种方法都不起作用,
预期:每个API调用应触发5秒延迟。相反,所有3个api调用都在5秒后给出响应。我需要每个电话都需要5秒,最后总共需要15秒。,
但是立即解雇所有的工作人员,不要拖延
*/
函数fireJobSearchHttpAPI1(jobNum){
setTimeout(函数(){
log(“作业编号””+jobNum+“'API激发@”+new Date().toLocaleTimeString());
}(延迟),;
}
函数fireJobSearchHttpAPI2(jobNum){
(函数myLoop(i){
setTimeout(函数(){
log(“作业编号””+jobNum+“'API激发@”+new Date().toLocaleTimeString());
如果(--i)myLoop(i);
},延迟)
})(1);
}
//主要方法

执行(数据集)
您需要将当前的
索引作为参数传递,因此您需要将该索引乘以当前api调用延迟,因此第一步是什么时候(索引=0),所以您应该执行类似于
(索引+1)*apiDelay
的操作,然后它将是5000,第二步,索引将是1,然后
(索引+1)*apiDelay
将是10000,最后一步
索引将是2,然后
(索引+1)*apiDelay
将是15000

在底部,对当前代码进行了一些修改

var数据集=[10,20,30];
无功延迟=100;
var-apiDelay=5000;
函数执行(数据集){
var i=0;
scannedJob(数据集,i);
}
//第一次超时法//
函数scannedJob(数据集,i){
setTimeout(函数(){
log(“扫描的作业编号=“+dataset[i]”+“@time=“+new Date().toLocaleTimeString());
fireJobSearchHttpAPI1(数据集[i],i);
i++;
如果(dataset.length>i){
self.scannedJob(数据集,i);
}否则{
i=0;
}
},延误);
}
//第二次超时方法//
/*我写的两种方法都不起作用,
预期:每个API调用应触发5秒延迟。相反,所有3个api调用都在5秒后给出响应。我需要每个电话都需要5秒,最后总共需要15秒。,
但是立即解雇所有的工作人员,不要拖延
*/
函数fireJobSearchHttpAPI1(jobNum,索引){
console.log(“索引”,((索引+1)*apiDelay))
setTimeout(函数(){
log(“作业编号””+jobNum+“'API激发@”+new Date().toLocaleTimeString());
},((指数+1)*apiDelay);
}
函数fireJobSearchHttpAPI2(jobNum){
(函数myLoop(i){
setTimeout(函数(){
log(“作业编号””+jobNum+“'API激发@”+new Date().toLocaleTimeString());
如果(--i)myLoop(i);
},延迟)
})(1);
}
//主要方法

执行(数据集)您的代码按预期工作,我的意思是代码的执行方式就是代码的执行方式,那么您到底需要什么?因为delayingAPI正在按预期执行,所以它会等待3秒执行,每一次都是如此。@JohuderGonzalez:每次API调用都应该延迟5秒。相反,所有3个api调用都在5秒后给出响应。我需要每个调用都需要5秒,最后总共需要15秒。因此,您的代码执行方式是立即执行的,您需要将每个索引复制到api延迟value@JohuderGonzalez好的,谢谢。我有一个问题,在过去的4天里我一直在忍受。你能检查一下这个问题吗。