调用 returns Observable 而不是实际对象
Call returns Observable instead of actual object
我对 this.dashboardFacade.getCurrentUser(uid).then((user) => console.log(user));
的调用一直返回一个 Observable 对象而不是实际的数据对象 - 有人知道如何修复它吗?
DashboardComponent
this.dashboardFacade.getCurrentUserUid().then((uid) => {
if (uid) {
this.dashboardFacade.getCurrentUser(uid).then((user) => console.log(user));
}
});
DashboardFacade
getCurrentUser(uid: string): Promise<unknown> {
return this.userService.getUser(uid);
}
用户服务
getUser(uid: string): Promise<unknown> {
return firebase
.auth()
.currentUser.getIdToken()
.then((token: string) => {
this.logger.debug(`Token generated: ${token}`);
return this.httpClient
.get(`${environment.apiBasePath}/users`, {
headers: { authorization: `Bearer ${token}` },
})
});
}
正在尝试做:
this.dashboardFacade.getCurrentUserUid().then(uid => {
if(uid) {
this.dashboardFacade.getCurrentUser(uid).subscribe(
(user) => console.log(user)
)
}
});
抛出以下错误:
Uncaught (in promise): TypeError: this.dashboardFacade.getCurrentUser(...).subscribe is not a function TypeError: this.dashboardFacade.getCurrentUser(...).subscribe is not a function in DashboardComponent
在 javascript 中,您拥有我们所说的 Promise Chain。当我承诺 return 一个 Promise 时会发生这种情况,中间的 promise 有点不可见,你会收到链中最后一个已解决的 promise 的结果。
你的方法 getUser return 一个 Promise,但是这个 Promise 实际上不是 return 另一个 promise 而是一个 Observable,在这种情况下链式 promise 是没有参与,你会收到一个 Observable。如果你不需要观察,你可以做什么来将你的方法转换为 return Promise :
getUser(uid: string): Promise<unknown> {
return firebase
.auth()
.currentUser.getIdToken()
.then((token: string) => {
this.logger.debug(`Token generated: ${token}`);
return this.httpClient
.get(`${environment.apiBasePath}/users`, {
headers: { authorization: `Bearer ${token}` },
}).toPromise(); <<<< transform to observable as promise
});
}
关于你的错误,这也是“正常”的
this.dashboardFacade.getCurrentUserUid().then(uid => {
if(uid) {
this.dashboardFacade.getCurrentUser(uid).subscribe(
(user) => console.log(user)
)
}
});
this.dashboardFacade.getCurrentUser(uid) 实际上 return 一个 Promise (of Observable) 而不是一个 Observable,所以你需要等待这个 promise 被 resolved 之后正在订阅
可能是这样的(如果你在 getUser 方法中保持可观察)
this.dashboardFacade.getCurrentUserUid().then(uid => {
if(uid) {
this.dashboardFacade.getCurrentUser(uid).then(currentUserOsb => {
currentUserObs.subscribe(user => console.log(user));
});
}
});
我对 this.dashboardFacade.getCurrentUser(uid).then((user) => console.log(user));
的调用一直返回一个 Observable 对象而不是实际的数据对象 - 有人知道如何修复它吗?
DashboardComponent
this.dashboardFacade.getCurrentUserUid().then((uid) => {
if (uid) {
this.dashboardFacade.getCurrentUser(uid).then((user) => console.log(user));
}
});
DashboardFacade
getCurrentUser(uid: string): Promise<unknown> {
return this.userService.getUser(uid);
}
用户服务
getUser(uid: string): Promise<unknown> {
return firebase
.auth()
.currentUser.getIdToken()
.then((token: string) => {
this.logger.debug(`Token generated: ${token}`);
return this.httpClient
.get(`${environment.apiBasePath}/users`, {
headers: { authorization: `Bearer ${token}` },
})
});
}
正在尝试做:
this.dashboardFacade.getCurrentUserUid().then(uid => {
if(uid) {
this.dashboardFacade.getCurrentUser(uid).subscribe(
(user) => console.log(user)
)
}
});
抛出以下错误:
Uncaught (in promise): TypeError: this.dashboardFacade.getCurrentUser(...).subscribe is not a function TypeError: this.dashboardFacade.getCurrentUser(...).subscribe is not a function in DashboardComponent
在 javascript 中,您拥有我们所说的 Promise Chain。当我承诺 return 一个 Promise 时会发生这种情况,中间的 promise 有点不可见,你会收到链中最后一个已解决的 promise 的结果。
你的方法 getUser return 一个 Promise,但是这个 Promise 实际上不是 return 另一个 promise 而是一个 Observable,在这种情况下链式 promise 是没有参与,你会收到一个 Observable。如果你不需要观察,你可以做什么来将你的方法转换为 return Promise :
getUser(uid: string): Promise<unknown> {
return firebase
.auth()
.currentUser.getIdToken()
.then((token: string) => {
this.logger.debug(`Token generated: ${token}`);
return this.httpClient
.get(`${environment.apiBasePath}/users`, {
headers: { authorization: `Bearer ${token}` },
}).toPromise(); <<<< transform to observable as promise
});
}
关于你的错误,这也是“正常”的
this.dashboardFacade.getCurrentUserUid().then(uid => {
if(uid) {
this.dashboardFacade.getCurrentUser(uid).subscribe(
(user) => console.log(user)
)
}
});
this.dashboardFacade.getCurrentUser(uid) 实际上 return 一个 Promise (of Observable) 而不是一个 Observable,所以你需要等待这个 promise 被 resolved 之后正在订阅
可能是这样的(如果你在 getUser 方法中保持可观察)
this.dashboardFacade.getCurrentUserUid().then(uid => {
if(uid) {
this.dashboardFacade.getCurrentUser(uid).then(currentUserOsb => {
currentUserObs.subscribe(user => console.log(user));
});
}
});