将我的函数转换为异步函数

时间:2017-10-12 19:11:25

标签: javascript angular typescript asynchronous

在我的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');
});

我读到我可以使这个函数异步并使用等待...?我该怎么做?

2 个答案:

答案 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()。