首页 > 解决方案 > 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)' 无法从用法中推断出来。尝试明确指定类型参数。

标签: reactive-programmingreactivereactiveui

解决方案


SelectMany方法包含用于处理任务和异步方法的重载。它具有可以处理取消的重载。如果您使用此方法而不是 Select 它将解决您的问题。

另一种选择是使用.Select(Observable.FromAsync(...method...).Switch(). 这种方法将选择一个新的 observable。开关会自动处理旧值


推荐阅读