小编Way*_*rer的帖子

ReactiveUI异常处理

我查看了一些ReactiveUI示例,但是我看不到一个如何处理异常的简单示例,其中应该向用户显示消息.(如果有一个很好的例子可以有人指出我吗?).

我的第一个问题是如何使用ReactiveCommand和ToProperty处理异常.例如,我有以下代码:

public class MainWindowViewModel : ReactiveObject
{
    public ReactiveCommand CalculateTheAnswer { get; set; }

    public MainWindowViewModel()
    {
        CalculateTheAnswer = new ReactiveCommand();

        CalculateTheAnswer
            .SelectMany(_ => AnswerCalculator())
            .ToProperty(this, x => x.TheAnswer);

        CalculateTheAnswer.ThrownExceptions
            .Select(exception => MessageBox.Show(exception.Message));
    }

    private readonly ObservableAsPropertyHelper<int> _theAnswer;
    public int TheAnswer
    {
        get { return _theAnswer.Value; }
    }

    private static IObservable<int> AnswerCalculator()
    {
        var task = Task.Factory.StartNew(() =>
        {
            throw new ApplicationException("Unable to calculate answer, because I don't know what the question is");
            return 42;
        });

        return task.ToObservable();
    } …
Run Code Online (Sandbox Code Playgroud)

c# reactiveui

13
推荐指数
1
解决办法
3774
查看次数

RxJS5中shareReplay(1)的模式

我已经开始玩RxJS5,现在看到不再有shareReplay方法了.

很可能我经常shareReplay在RxJS4中滥用,但现在我正在努力获得我想要的行为,即:

  • 创建一个可观察的
  • 订阅observable,observable产生一个值
  • 第二次订阅observable,我得到相同的第一个值
  • Observable产生第二个值,两个订阅都获得第二个值

如何使用RxJS5实现此功能?

总的来说,我认为我对RxJS运算符非常了解,但对我来说,整个冷,热,发布,连接都不太清楚.有没有一个很好的参考,显示如何找到我有什么样的可观察,以便我可以以逻辑的方式找出为什么订阅没有获取值,或为什么一个observable被执行倍数?

编辑

快乐新闻,shareReplay()又回到了RxJS 5.4.0:

更新日志:https://github.com/ReactiveX/rxjs/blob/892700dd4f5d5e5f9ae9276ede32208f4390c5e9/CHANGELOG.md#540-2017-05-09

Barebones文档:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-shareReplay

javascript rxjs

11
推荐指数
1
解决办法
3428
查看次数

如何将泛型类型指定为泛型(更高级的类型)

在Typescript中,是否可以将泛型类型指定为泛型?具体来说,我希望能够定义一个函数签名,如下所示:

function events<T>(): T<Event>
Run Code Online (Sandbox Code Playgroud)

但是我从typescript编译器收到以下错误:

[ts] Type 'T' is not generic.
Run Code Online (Sandbox Code Playgroud)

typescript

6
推荐指数
1
解决办法
627
查看次数

具有可区分联合的 Typescript 条件类型

我正在使用一个定义了以下类型的库:

type VoidableCallback<EventValue> = EventValue extends void ? () => void : (val: EventValue) => void;
Run Code Online (Sandbox Code Playgroud)

该库公开了一个返回上述类型的函数:

declare function fn<T>(): VoidableCallback<T>;
Run Code Online (Sandbox Code Playgroud)

我想将此函数与受歧视的联合一起使用:

type Action = { type: 'add'; n: number } | { type: 'multiply'; n: number };

const callback = fn<Action>();
callback({ type: 'add', n: 1 });
Run Code Online (Sandbox Code Playgroud)

然而 Typescript (3.4.1) 给了我这个错误消息:

类型“add”不可分配给类型“add”和“multiply”。类型“add”不可分配给类型“multiply”。ts(2322)

预期的类型来自属性“type”,该属性在类型“{ type: "add"; ”上声明。n:数量;} & { 类型:“乘”;n:数量;}'

我不明白这是为什么 - 似乎总和(联合)类型被解释为“产品”类型。

如果我将类型定义更改为:

type VoidableCallback<EventValue> = (val: EventValue) => void;
Run Code Online (Sandbox Code Playgroud)

... Typescript 不会抱怨。所以这与条件类型和联合类型有关。

如果可以理解这里发生了什么,那么也许我可以向库(rxjs-hooks)做一个 PR。

typescript

4
推荐指数
1
解决办法
4862
查看次数

ReactiveUI查看绑定到附加属性

此博客条目描述了使用View Bindings替代XAML Bindings.我喜欢基于会议的连线:

this.OneWayBind(ViewModel, x => x.FooMirror);
Run Code Online (Sandbox Code Playgroud)

如果我想绑定到TextBox的Text属性:

this.Bind(ViewModel, x => x.SomeText, x => x.SomeText.Text);
Run Code Online (Sandbox Code Playgroud)

但是我有一个我想要绑定的附加属性(用于附加行为模式的实现).如何使用View Bindings语法绑定到附加属性?

reactiveui

1
推荐指数
1
解决办法
1533
查看次数

标签 统计

reactiveui ×2

typescript ×2

c# ×1

javascript ×1

rxjs ×1