在我的Angular应用程序中,我有一个方法,我需要执行该方法,直到从后端获得一个值:这是方法:
redrawGrid(params: any): void {
params.node.childFlower.setRowHeight( (this.globalRowCount * 34 ) + 34) ;
this.gridOptions.api.onRowHeightChanged();
}
我需要这个方法来执行AFTER this.globalRowCount(作为从服务返回的全局值)从后端返回。
变量this.globalRowCount来自对可观察的订阅
this.userlistService.childRowLength.subscribe( (num: number) => {
this.globalRowCount = num;
console.log(this.globalRowCount + ' globalRowCount after num assigned');
});
我读到我可以使这个函数异步并使用等待...?我该怎么做?
答案 0 :(得分:1)
这就是你可以返回Promise
的方法,这就是所有酷孩子最近在JavaScript和TypeScript中做异步的方式。
function redrawGrid(params: any): PromiseLike<void> {
return new Promise((resolve, reject) => {
params.node.childFlower.setRowHeight((rowCount * 34) + 34);
this.gridOptions.api.onRowHeightChanged();
resolve();
});
}
如果出现问题,你也可以处理错误并在那里打电话reject
,让消费者处理任何问题。
这个代码执行时不会改变,所以如果你希望在其他异步操作后调用,那么你真的希望在其他异步操作解决时调用它。 ..我不知道您正在使用的API,但我们正在谈论类似下面的伪代码......
redrawGrid(params: any): void {
// the getGlobalRowCount is now the method returning a promise
this.getGlobalRowCount()
.then((rowCount) => {
params.node.childFlower.setRowHeight((this.globalRowCount * 34) + 34);
this.gridOptions.api.onRowHeightChanged();
resolve();
});
}
答案 1 :(得分:0)
你可能会对使用异步等待的地方感到困惑,但你可能会想要这样的东西:
async redrawParentFunction(){
if(!this.globalRowCount)
this.globalRowCount = await http.get(....).toPromise()//some promise
this.redrawGrid(....)
}
redrawGrid(params: any): void {
params.node.childFlower.setRowHeight( (this.globalRowCount * 34 ) + 34) ;
this.gridOptions.api.onRowHeightChanged();
}
Async位于所需的函数名称前面。
await在promise之前而不是then()。