我正在使用Angular 6
。
我有一个链接数组和一个变量,该变量以与数组一一对应的顺序存储获取的信息。
这是我使用for
循环要执行的操作。
products: any;
processedItems: Array<any> = [];
private _processItem() {
for (let i = 0; i < this.products.length; i++) {
this.scraperService.scrapSingle(this.products[i].url).subscribe(
res => {
if (res.status.http_code === 200) {
const properties = this.scraperService.processSingleProduct(res.contents);
const p_item = {};
p_item['info'] = this.products[i];
p_item['properties'] = properties;
this.processedItems.push(p_item);
}
console.log(res);
}
);
}
console.log(this.products.length);
}
但是如何在循环中移至下一个索引之前等待subscribe
?
答案 0 :(得分:1)
只需在给定i的所需索引处将p_item拼接到您的数组中即可。
例如,而不是这样做,
this.processedItems.push(p_item);
执行此操作
this.processedItems.splice(p_item, 0, i);
这可以解决您的问题:)
答案 1 :(得分:0)
通过使用toPromise方法,使用promise而不是rx.js订阅。您可能需要将 res 映射到json。 res.map(item => item.json());
products: any;
processedItems: Array < any > =[];
private _processItem() {
this.products.array.forEach(async (element) => {
const res = await this.scraperService.scrapSingle(element.url).toPromise();
if (res.status.http_code === 200) {
const properties = this.scraperService.processSingleProduct(res.contents);
const p_item = {};
p_item['info'] = element
p_item['properties'] = properties;
this.processedItems.push(p_item);
}
console.log(res);
});
console.log(this.products.length);
}