这是我的模板的一个片段:
<div class="explanation">
{{ foo() | async }}
</div>
这就是功能:
foo(): Promise<string> {
return Promise.resolve('hello');
}
这只是挂起了浏览器。为什么?我错过了什么?
来自Promise.resolve
上的MDN
警告:不要对解析为自身的表调用Promise.resolve。这将导致无限递归,因为它试图压平看似无限嵌套的promise。
AND
来自Angular的避免副作用指南:
对模板表达式的评估应该没有明显的副作用。表达语言本身就是为了保护你的安全。不能为属性绑定表达式中的任何内容赋值,也不能使用递增和递减运算符。
您的实现似乎就是这么做的。
修复:
正如wannadream所建议的,将promise分配给一个属性,然后在模板中使用该属性以及async
管道:
import { Component } from '@angular/core';
@Component({...})
export class AppComponent {
foo: Promise<string>;
ngOnInit() {
this.foo = Promise.resolve('hello');
}
}
在模板中:
<div class="explanation">
{{ foo | async }}
</div>