我需要使用 promise 返回的格式来格式化日期。我尝试从 toView(value) 返回承诺。但这不起作用。
@autoinject
export class DateTimeValueConverter {
constructor(private formatService:FormatService) {
}
toView(value) {
return this.formatService.getFormat().then(format=>
moment(value).format(format)
);
}
}
这是 FormatService 的代码,它可以正常工作
export class FormatService {
private format;
constructor(private http:AppHttp) {
this.format= null;
}
public getFormat() : Promise<string>{
if (this.format){
var promise = new Promise<string>((resolve, reject)=>{
resolve(this.format);
});
return promise;
}
return this.http.get('format')
.then((format) => {
if (format){
this.format= format;
}
return format;
});
}
}
据我所知,你不能在值转换器中使用异步功能。我看到的一种解决方案是format
作为参数从视图模型传递到值转换器(通过视图)。但这意味着你需要在视图模型中获取格式,这会破坏整个值转换器点......
我看到的另一个解决方案是调整FormatService
以缓存格式(假设“格式”不经常更改)。这样,该getFormat
函数将是同步的,你可以在值转换器中使用它。当然,format
在FormatService
调用任何值转换器之前,你需要找到一种在其中进行初始化的方法。
是的,那只是复制错误。实际上正如我所提到的,FormatService 工作正常。它用于其他情况并按预期返回具有格式的 Promise。问题是我无法从 toView 方法返回 promise。它需要一个字符串。并打印出[Object]。
好吧,现在我看到了问题所在。好吧,toView 方法也返回一个promise,所以你需要调用'then'。你能展示使用 toView 的代码吗?还是从视图中使用?
它是从视图中使用的。${entity.created | 约会时间}