angular - AngularFireFunctions httpCallable 响应后不更新
问题描述
使用来自 AngularFireFunctions' 的 Observable httpsCallable
,即使在 http 请求返回后,视图也不会更新该值。
我有一个简单的组件,它使用 AngularFireFunctions 将 httpCallable 设置为一个简单的函数。我可以看到在浏览器的网络检查器中进行的调用,并且我tap(x=>console.log(x))
在 observable 上有一个确实记录了从函数返回的值。但是,{personObservable | async | json}
即使在 observable 具有值之后(来自 tap 触发器的控制台日志),它也是 null。
零件:
import { AngularFireFunctions } from '@angular/fire/functions';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
@Component({
selector: 'app-simple-test',
template: '{{personObservable | async | json}}'
})
export class SimpleTestComponent implements OnInit {
personObservable: Observable<any> = this.fireFunctions
.httpsCallable('getPerson')({})
.pipe(
tap(person => console.log(person))
);
constructor(
private fireFunctions: AngularFireFunctions) {
}
...
火力基地功能:
import * as functions from 'firebase-functions';
export const viewInvite =
functions.https.onCall((data, context) => {
return {name: "test name"};
});
正如预期的那样,页面加载会导致对 firebase 函数的 http 请求,控制台将包含{name: "test name"}
指示 http 请求有效,触发了点击,并且 observable 现在有一个值。该页面仍将呈现“null”。
我试过用httpsCallable(...)(...)
简单的 替换of({name:"test"})
,效果很好。
httpsCallable 返回的 Observable 是否有什么特别之处会阻止视图使用其值?
解决方案
我不确定是什么导致了这种奇怪的输出,但我已经为任何与之苦苦挣扎的人确定了两个(不理想的)解决方案:
1. 将 observable toPromise() 转换为 observable,如果你需要它的话
personPromise = personObservable.toPromise();
return from(personPromise);
2.通过HTTP请求调用函数。
推荐阅读
- mysql - 找出库存水平变为负数之前的天数
- sql-server - 本周间隔
- bazel - 将 copts/defines 传播到目标的所有依赖项
- c# - 在 ClickOnce 应用程序中包含字体文件
- python-3.x - Tkinter 给了我第二个窗口
- r - 在 R 中计算随机森林模型的 AUC
- c# - 如何在 xamarin 中为每个循环添加多个标记和列表模型
- python - 如何获取每个特征的 SHAP 值?
- javascript - 在 JavaScript 中未检测到有条件的对象
- python - django 项目不能与 apache2 一起使用,可以与内置的 web 服务器一起使用