如何在TypeScript中等待函数的返回?

时间:2017-10-24 05:59:55

标签: typescript

我有一个返回值的方法,我将返回值赋给变量。函数返回正确的值,但变量未设置返回值。但是如果我在函数中设置this.size,我会得到适当的值。我从许多函数调用this.searchData函数,所以我不能这样做(在这种情况下我将不得不使用多if语句),那么有没有办法从函数中获取返回值。我想用timeout还有其他方法吗?

searchSize(event): void {
    this.sizes = this.searchData(event, AppConsts.size);
}

searchData(event, property): any {

    this._serviceProxy.getProperties(
        property,
        event.query,
        event.query
    ).subscribe((result) => {

        console.log(result.items);
        return result.items;
    });
}

2 个答案:

答案 0 :(得分:1)

为了更简洁的代码,您还可以使用async / await语法。 你必须将你的observable转换为promise,然后你可以等待结果:

import * as rx  from 'rxjs'
class ListResultDtoOfPropertyDTO{
    items: any[]
}
class Test {
    sizes: any[];
    _serviceProxy : {
        getProperties() : rx.Observable<ListResultDtoOfPropertyDTO>
    }
    async searchSize(event): Promise<void> {
        this.sizes = await this.searchData(event);
    }

    async searchData(event): Promise<any[]> {
        var result = await this._serviceProxy.getProperties()
            .toPromise()

        console.log(result.items);
        return result.items;
    }
}

说明:

Typescript允许在等待Promise的结果时使用更好的语法。语法不适用于Observables(希望将来它会),但我们可以在这种情况下将Observable转换为promise。有关async / await语法的更多信息,请查看here

答案 1 :(得分:-1)

  

如何在TypeScript中等待函数的返回?

第1步

返回可观察的

 return this._serviceProxy.getProperties( // note : return
        property,
        event.query,
        event.query
    ).subscribe((result) => {

        console.log(result.items);
        return result.items;
    });
}

第2步

subscribe返回的值,例如

searchData(something).subscribe