gpt4 book ai didi

在for循环内订阅的Angular 2调用函数

转载 作者:太空狗 更新时间:2023-10-29 17:48:08 25 4
gpt4 key购买 nike

我有一个订阅服务的功能:

selectCar(carNumber) {
this.carService.getCarByNumerator(carNumber)
.subscribe( (car) => {
console.log(carNumber);
//more stuff here
},
(err) => console.log(err)
);
}

我想在 for 循环中调用这个函数,如下所示:

for(let carNumber of carNumbers) {
this.selectCar(carNumber);
}

问题是,有时它按我预期的那样工作,但有时顺序与列表中的不一样。

例如列表是:

45
67
89

但是当我查看控制台时,我看到以下内容:

67
89
45

如何强制 for 循环在当前函数调用完成之前不转到下一个项目?

最佳答案

如果您需要有效地等待所有 getCarByNumerator() 在处理您的数据列表之前完成,您可以使用 forkJoin运营商。

let carNumbers = [1, 2, 3];
let observables = carNumbers.map(carNumber => this.carService.getCarByNumerator(carNumber));

// forkJoin the array/collection of observables
let source = Rx.Observable.forkJoin(observables);

// subscribe and sort combined array/collection prior to additional processing
source.subscribe(x => console.log(x.sort((a, b) => a - b));

这里是 JS Bin演示功能。该示例演示了从“API”返回数据的不同延迟。

希望对您有所帮助!

关于在for循环内订阅的Angular 2调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45305439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com