我正在尝试从Ionic4-Angular前端向我的Django API发送请求,问题是我还不熟悉这种技术或JavaScript。 在下面的代码中,我试图返回订阅数据并将其分配给const。
async getUserLogged() {
const tkn = await this.authService.getToken();
const user = await this.http
.post('http://localhost:8000/api/getuser/', {
token: tkn
})
.subscribe(response => {
console.log(response);
return response;
});
console.log(user);
return user;
}
第一个console.log包含我要搜索的真实对象。 但是,第二个打印出一个Subscriber对象。 谁能向我解释这种行为以及如何解决
答案 0 :(得分:1)
这是我设置此方法的方式:
getUserLogged() {
return this.authService.getToken().pipe(
switchMap(tkn=> {
return this.http.post('http://localhost:8000/api/getuser/', {
token: tkn
})
})
);
}
然后按以下方式使用此方法:
getUserLogged().subscribe(userData => console.log(userData));
此方法使用switchMap运算符,该运算符仅在http.post
返回令牌后才调用authService.getToken
。您可以找到所有RxJs运算符here的文档。
答案 1 :(得分:-1)
subscribe
的回调函数无法向user
返回任何值。它只会得到您提到的Subscriber
对象,这是可观察的结果。
如果您想使用async
,await
方法,则需要使用toPromise
方法来实现可观察的承诺。
async getUserLogged() {
const tkn = await this.authService.getToken();
const user = await this.http
.post('http://localhost:8000/api/getuser/', {
token: tkn
}).toPromise();
console.log(user);
return user;
}
答案 2 :(得分:-1)
将可观察到的响应转换为承诺,可以轻松地从需要的地方致电。
const getUserLogged = () => {
const tkn = await this.authService.getToken();
return this.http
.post('http://localhost:8000/api/getuser/', {
token: tkn
})
.toPromise();
};
const someOtherFunc = async () => {
const user = await getUserLogged();
console.log({ user });
};