我正试图在for loop
内的api通话之间设置延迟。
我尝试过使用setTimeout()
而没有任何运气。
以下是代码:
for(let pc = 0; pc < this.cModel.stuff.length; pc++)
{
for(let mc = 0; mc < this.cModel.stuff[pc].otherStuff.length; mc){
let mp = this.mcModel.stuff[pc].otherStuff[mc];
//method that calls api ***need delay***
this.callCancel(mp.key, cp.key);
}
}
private (mpkey: string, cpkey: string){
//code that builds up object *obj
//for api call here
this.executeApiCallHere(obj);
}
以下是我尝试的内容:
我已经尝试将setTimeout()放在forloop中:
setTimeout(this.callCancel(mp.key, cp.key), 1000);
我已经尝试将setTimeout()放在调用api的方法中:
setTimeout(() => { this.executeApiCallHere(obj);}, 1000);
我已经尝试将setTimeout()放在forloop周围:
setTimeout(function () { ......code ....}, 1000);
所有上述结果在两次通话之间没有延迟。
我应该如何在打字稿中处理这个问题,以便foreach
中的forloop
项在调用之间有延迟?
答案 0 :(得分:2)
如果你运行一个循环10次并在该循环中用1秒钟调用setTimeout
,结果将是1秒延迟,然后快速继续点燃你已经延迟的回调。结果是初始延迟,但调用之间没有延迟。
如果要在呼叫之间延迟,则必须增加每次setTimeout
呼叫之间的超时。您可以使用计数器或使用for
循环中的值(取决于您调用它的位置)来执行此操作。
实施例
var timeoutSeconds = 1;
for(let pc = 0; pc < this.cModel.stuff.length; pc++)
{
for(let mc = 0; mc < this.cModel.stuff[pc].otherStuff.length; mc){
setTimeout(() => this.callCancel(mp.key, cp.key), 1000 * timeoutSeconds);
timeoutSeconds++;
}
}
答案 1 :(得分:1)
async
/ await
是你的朋友:
0.7179876668378711
0.5230729999020696
0.4444526666775346
0.3233160013332963