等待订阅在 while 循环中完成其工作(打字稿)
Wait for subscribe to finish its job inside while loop (typescript)
我有一个 while 循环,在 while 循环内我有两个订阅。我怎样才能等他们完成才能继续使用 while 循环?
this.counter = 1;
array[0] = 3;
while(this.counter <= array[0])
{
console.log("WHILE: "+this.counter);
this.ms.getPopular(this.tv, this.counter).subscribe(val => {
this.afstore.collection("matches").doc(this.id).valueChanges().pipe(take(1)).subscribe((val2: any) => {
console.log(this.counter);
if(this.counter == array[0])
{
return;
}
//console.log("YES");
this.counter++;
});
});
this.counter++;
}
我当前的输出是
WHILE: 1
WHILE: 2
WHILE: 3
4
5
6
但我想要得到的输出是
WHILE: 1
1
2
3
在 while 循环中甚至不需要 this.counter++
。如果没有 while 本身,它就会无限运行
使用递归函数代替循环。
this.counter = 0;
this.max = 3;
function subscribe() {
this.ms.getPopular(this.tv, this.counter).subscribe(val => {
this.afstore.collection("matches").doc(this.id).valueChanges().pipe(take(1)).subscribe((val2: any) => {
if (this.counter == this.max) {
return;
} else {
this.counter++;
this.subscribe();
}
});
});
}
我有一个 while 循环,在 while 循环内我有两个订阅。我怎样才能等他们完成才能继续使用 while 循环?
this.counter = 1;
array[0] = 3;
while(this.counter <= array[0])
{
console.log("WHILE: "+this.counter);
this.ms.getPopular(this.tv, this.counter).subscribe(val => {
this.afstore.collection("matches").doc(this.id).valueChanges().pipe(take(1)).subscribe((val2: any) => {
console.log(this.counter);
if(this.counter == array[0])
{
return;
}
//console.log("YES");
this.counter++;
});
});
this.counter++;
}
我当前的输出是
WHILE: 1
WHILE: 2
WHILE: 3
4
5
6
但我想要得到的输出是
WHILE: 1
1
2
3
在 while 循环中甚至不需要 this.counter++
。如果没有 while 本身,它就会无限运行
使用递归函数代替循环。
this.counter = 0;
this.max = 3;
function subscribe() {
this.ms.getPopular(this.tv, this.counter).subscribe(val => {
this.afstore.collection("matches").doc(this.id).valueChanges().pipe(take(1)).subscribe((val2: any) => {
if (this.counter == this.max) {
return;
} else {
this.counter++;
this.subscribe();
}
});
});
}