reactive-programming - WhenAnyValue:如何在 select 中调用异步函数
问题描述
在构造函数中设置我的可观察对象时,如何在转换/选择函数期间调用异步函数或返回 IObservable 的函数?
我在 select 函数中尝试了各种排列,但它们都导致编译器错误。
在构造函数中:
this.WhenAnyValue(k => k.BaseProperty).Select(j => ObjectHelpers.GetAnotherValueThatReturnsObservable(j)).Select(m => m)
.ToProperty(this, k=> k.PropertyToUpdate, out this.OaPHProperty, initialValue: false);
另一个功能
IObservable<bool> ObjectHelpers.GetAnotherValueThatReturnsObservable(j)
{
...this returns an IObservable that is used to update a property whenever BaseProperty changes.
}
这是错误消息 The type arguments for method 'OAPHCreationHelperMixin.ToProperty(IObservable, TObj, Expression>, out ObservableAsPropertyHelper, Tret, bool, IScheduler)' 无法从用法中推断出来。尝试明确指定类型参数。
解决方案
该SelectMany
方法包含用于处理任务和异步方法的重载。它具有可以处理取消的重载。如果您使用此方法而不是 Select 它将解决您的问题。
另一种选择是使用.Select(Observable.FromAsync(...method...).Switch()
. 这种方法将选择一个新的 observable。开关会自动处理旧值
推荐阅读
- javascript - 如何使用 mongoose 为已创建的文档编写子文档
- c# - 如何在 Unity 中显示一个概述的 GUI 框?
- python - 如何减少执行此三元组计数功能所需的复杂性/时间?
- reactjs - ReactJs 添加多个带上下文的减速器
- javascript - 如何使用 React 操作 HTML 元素并设置它们的样式
- python - 如何将列名与字典键匹配并向计数器添加值
- postgresql - 如何在 Ubuntu 20.04 上安装 Kong (https://konghq.com/)?
- julia - 将所有“使用”语句放在文件(Julia)的顶部是否不好?
- python - 使用python Elasticsearch映射地理点后如何获取一些原始json字段?
- c - C:使用指针访问多维数组