【问题标题】:WhenAnyValue: How to call an asynchronous function within selectWhenAnyValue:如何在 select 中调用异步函数
【发布时间】:2019-09-02 19:54:24
【问题描述】:

在构造函数中设置我的 observable 时,如何调用异步函数或在转换/选择函数期间返回 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. 
}

这是错误信息 无法从用法中推断方法 'OAPHCreationHelperMixin.ToProperty(IObservable, TObj, Expression>, out ObservableAsPropertyHelper, Tret, bool, IScheduler)' 的类型参数。尝试明确指定类型参数。

【问题讨论】:

    标签: reactive-programming reactive reactiveui


    【解决方案1】:

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

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

    【讨论】:

    • @Ana 这行得通,但你能帮我理解为什么会这样吗?
    猜你喜欢
    • 2020-03-09
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多