【问题标题】:JavaScript: Asynchronous function only in one case. How to access the result?JavaScript:仅在一种情况下使用异步函数。如何访问结果?
【发布时间】:2021-02-22 17:19:08
【问题描述】:

我正在使用 Angular 8 开发一个 Web 应用程序。我在使用带有异步函数的 JavaScript 时遇到了问题。 我创建了一个具有公共方法的服务:此方法检查可能随时间变化的条件,在一种情况下(true)它会通过对 HTTP 调用;在另一种情况下 (false) 它返回它已经拥有的数据。这是一个代码示例:

private date; // My date

getMyDate() {

    if(my_boolean_condition) {

        this.http.post(this.myUrl, JSON.stringify(this.myInputData)).toPromise().then((data: any) => {
            this.date = data;

            return this.date;
        }

    } else {
        return this.date;
    }

}

我完全知道这段代码有问题,但我不明白是什么。 如果客户端(例如 Angular 组件)调用我的 getMyDate() 方法,则返回值是 undefined。 我想要的是该方法始终返回一个不同于 undefined 的值,无论它是否进行 HTTP 调用。

【问题讨论】:

标签: javascript angular http web-services asynchronous


【解决方案1】:

是的,首先return this.date; 是错误的,因为它返回到传递给thenable 的匿名函数。正确的方法是使用async/await:

async getMyDate() {

    if(my_boolean_condition) {

        let response = await this.http.post(this.myUrl, JSON.stringify(this.myInputData)).toPromise();
        return response;
    } 

    return this.date;

}

编辑

查看更多:https://javascript.info/async-await

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2015-06-30
    • 2018-08-17
    • 2019-01-15
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    相关资源
    最近更新 更多