当我尝试像这样绑定异步函数时,我会得到一个没完没了的循环:
<tr *ngFor="let i of items">
<td>{{myAsyncFunc(i) | async}}</td>
</tr>这是一项功能:
private myAsyncFunc(i: string): Promise<string> {
return Promise.resolve("some");
}我做错什么了吗?还是这是个虫子?
发布于 2016-12-21 15:07:05
您将在每次调用中从myAsyncFunc(i: string)返回一个新的承诺,这就是为什么您会得到一个“无止境的循环”。尝试返回相同的诺言实例;-)
“无止境循环”实际上不是传统的无止境循环,而是async管道在其输入承诺解决时触发变化检测周期的副作用。在这个新的变化检测周期,角将调用myAsyncFunc(i: string),并得到一个新的承诺来观察,然后解决整个事件重新开始。
发布于 2018-08-30 14:29:23
如果异步/可观测性要求您传递一个参数(例如,您在ngFor循环中),那么您可以为此创建一个自定义异步管道。
@Pipe({
name: 'customPipe'
})
export class customPipe implements PipeTransform {
constructor(private someService: SomeService) {}
/**
*
* @param id
*/
transform(id: number): Observable<boolean> {
return this.someService.shouldShow(id);
}
}在模板中,您可以将异步管道调用为:
<td>{{id | customPipe | async}}</td>https://stackoverflow.com/questions/41265716
复制相似问题