JavaScript:仅在一种情况下使用异步函数。如何访问结果?

JavaScript:仅在一种情况下使用异步函数。如何访问结果?,javascript,angular,http,web-services,asynchronous,Javascript,Angular,Http,Web Services,Asynchronous,我正在使用Angular 8开发一个web应用程序。我在使用带有异步函数的JavaScript时遇到问题。 我创建了一个具有公共方法的服务:此方法检查随时间变化的条件,在一种情况下(true),它通过对HTTP调用的响应更新其数据;在另一种情况下(false),它返回它已经拥有的数据。下面是一个代码示例: private date; // My date getMyDate() { if(my_boolean_condition) { this.http.post(

我正在使用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;
    }

}
我完全知道这个代码有问题,但我不明白是什么。 如果客户端(例如角度组件)调用my
getMyDate()
方法,则返回值为
undefined

我希望该方法始终返回一个不同于未定义的值,无论它是否进行HTTP调用。

是,首先
返回this.date
错误,因为它返回到传递给表的匿名函数。正确的方法是使用异步/等待:

async getMyDate() {

    if(my_boolean_condition) {

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

    return this.date;

}
编辑


查看更多信息:

这是否回答了您的问题?1.初始化日期变量2。您不需要在http.post3中字符串化您的数据。您并不是在等待异步调用完成