Javascript 如何在*ngFor循环之前调用函数?::角2

Javascript 如何在*ngFor循环之前调用函数?::角2,javascript,arrays,sorting,angular,typescript,Javascript,Arrays,Sorting,Angular,Typescript,首先,我有一个http请求,如下所示: private getValues() { this._watchlistElements.map(v => this.http.get('http://localhost:8080/getValue/' + v.xid) .subscribe(res => { this._values.push(res.json()); })); }; 一切都很好,但问题是它返回一个混乱的、未排序的对象数组。我想对它

首先,我有一个http请求,如下所示:

private getValues() {
  this._watchlistElements.map(v =>
    this.http.get('http://localhost:8080/getValue/' + v.xid)
    .subscribe(res => {
      this._values.push(res.json());
    }));
};
一切都很好,但问题是它返回一个混乱的、未排序的对象数组。我想对它进行排序,这就是为什么我制作了一个单独的排序函数:

private sortPoints(){
  this._values.sort((a,b) => a.ts - b.ts);
}
\u值
变量中的元素由
*ngFor
循环显示:

<tr *ngFor="let elem of _values">
现在我必须在某个地方调用排序函数-
sortPoints()
。我想这样就可以了:

this.loadPoints = setInterval(() => {
  this.getValues();
  this.sortPoints();
}, 5000);
但不幸的是,它不会影响阵列。
*ngFor
循环只是用未排序的元素填充表。但如果我只做一个简单的按钮:

排序

就在单击按钮之后,数组被动态排序

那么我的问题是您是否有其他想法将函数放置在何处以使该机制工作

非常感谢您的帮助

EDIT实施了@Sasxa解决方案,收到以下错误:


您可以链接可观察的操作符并处理流,因此在最后(订阅时)您可以得到您喜欢的值:

private getValues(){
此.u watchlistElements.map(v=>
this.http.get('http://localhost:8080/getValue/“+v.xid)
.map(res=>res.json())
.map(数据=>this.\u values.push(数据))
.map(()=>this.u值.sort((a,b)=>a.ts-b.ts))
.subscribe(排序=>this._values=sorted));
};

因为这个.getValues();是异步调用this.sortPoints();赋值之后,即在此之后。_values.push(res.json());如果你这样做只是为了显示的目的,那么看看OrderBy@GeorgeOrderBy是一个管道。我试着用管道来解决这个问题,但它没有正常工作。不知怎么的,它没有工作。出现错误:
值。排序
不是函数。此外,Webstorm还会对
.map(res=>res.json())
行中的
映射进行着色,并警告这是一个未解析的函数或方法。从http获取的数据不是数组。如果您想在数组中存储数据并对其进行排序,最好创建一个管道。数组不是吗?如果我
console.log
变量的
\u值
表示它是一个对象数组。。。它还有一个数组的原型…
\u values
是数组,但是
response.json()
不是,在我的示例中,sort()在响应数据上运行,而不是在值上运行。。。我更新了答案,这可能有用。如果没有,移动一些东西,类似的东西会起作用…你的答案让我惊讶。我甚至没有想到响应可能不是数组。如果不使用管道,还有其他解决方法吗?我已经试过用烟斗吹了,但没用。
this.loadPoints = setInterval(() => {
  this.getValues();
  this.sortPoints();
}, 5000);