小编Ang*_*ity的帖子

在RxJs 5中分享Angular Http网络调用结果的正确方法是什么?

通过使用Http,我们调用一个执行网络调用并返回http observable的方法:

getCustomer() {
    return this.http.get('/someUrl').map(res => res.json());
}
Run Code Online (Sandbox Code Playgroud)

如果我们采用这个可观察的并添加多个订阅者:

let network$ = getCustomer();

let subscriber1 = network$.subscribe(...);
let subscriber2 = network$.subscribe(...);
Run Code Online (Sandbox Code Playgroud)

我们想要做的是确保这不会导致多个网络请求.

这可能看起来像是一个不寻常的场景,但实际上很常见:例如,如果调用者订阅了observable以显示错误消息,并使用异步管道将其传递给模板,那么我们已经有两个订阅者.

在RxJs 5中这样做的正确方法是什么?

也就是说,这似乎工作正常:

getCustomer() {
    return this.http.get('/someUrl').map(res => res.json()).share();
}
Run Code Online (Sandbox Code Playgroud)

但这是在RxJs 5中这样做的惯用方式,还是我们应该做其他事情呢?

注意:根据Angular 5 new HttpClient,.map(res => res.json())所有示例中的部分现在都没用,因为现在默认采用JSON结果.

rxjs angular2-services rxjs5 angular

281
推荐指数
11
解决办法
8万
查看次数

RxJs 5 share()运算符如何工作?

对我来说,对于RxJs 5 share()运算符的工作原理并不是100%清楚,请参阅最新的文档.Jsbin 这里的问题.

如果我创建一个0到2系列的observable,每个值相隔一秒:

var source = Rx.Observable.interval(1000)
.take(5)
.do(function (x) {
    console.log('some side effect');
});
Run Code Online (Sandbox Code Playgroud)

如果我为这个observable创建了两个订阅者:

source.subscribe((n) => console.log("subscriptor 1 = " + n));
source.subscribe((n) => console.log("subscriptor 2 = " + n));
Run Code Online (Sandbox Code Playgroud)

我在控制台中得到这个:

"some side effect ..."
"subscriptor 1 = 0"
"some side effect ..."
"subscriptor 2 = 0"
"some side effect ..."
"subscriptor 1 = 1"
"some side effect ..."
"subscriptor 2 = 1"
"some side effect ..."
"subscriptor 1 = 2"
"some …
Run Code Online (Sandbox Code Playgroud)

javascript rxjs rxjs5

29
推荐指数
2
解决办法
1万
查看次数

Stripe - JSON循环引用

我使用Stripe Checkout.js来创建付款.我正在创建一个处理程序,成功时会向服务器发送一个令牌:

let handler = StripeCheckout.configure({
                key: 'my_key',
                image: 'image.png',
                locale: 'auto',
                token: token => {

                    console.log(token.id);

                    // ... send token to server
                }
            });
Run Code Online (Sandbox Code Playgroud)

然后我使用处理程序创建一个令牌:

handler.open({
    name: 'Test',
    description: 'test',
    billingAddress: false,
    currency: 'eur',
    amount: '1200',
});
Run Code Online (Sandbox Code Playgroud)

这个处理程序触发测试checkout.js弹出窗口,我填写并单击Pay.它成功结束,意味着按钮显示为绿色.

但是,在按钮显示绿色的那一刻,以及将令牌打印到控制台的那一刻(在处理程序成功回调上),会抛出错误:

EXCEPTION:TypeError:将循环结构转换为JSON

stacktrace的主要部分是:

TypeError: Converting circular structure to JSON
    at Object.stringify (native)
    at Object.stringify (http://localhost:5000/dist/client/bundle.js:46294:29)
    at RPC.sendMessage (https://checkout.stripe.com/checkout.js:1:18068)
    at RPC.sendMessage (https://checkout.stripe.com/checkout.js:1:16180)
    at https://checkout.stripe.com/checkout.js:1:17137
    at RPC.ready (https://checkout.stripe.com/checkout.js:1:17416)
    at RPC.invoke (https://checkout.stripe.com/checkout.js:1:17084)
    at RPC.invoke (https://checkout.stripe.com/checkout.js:1:16180)
    at RPC.processMessage (https://checkout.stripe.com/checkout.js:1:18899)
    at RPC.processMessage (https://checkout.stripe.com/checkout.js:1:16180)
Run Code Online (Sandbox Code Playgroud)

通过检查代码,我们看到问题在这里:

        RPC.prototype.sendMessage = …
Run Code Online (Sandbox Code Playgroud)

stripe-payments angular

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

由于在WebSphere 8.5.5应用程序容器中升级到hibernate 4.2.8而导致的ClassCastExceptions

我们最近将hibernate升级4.0.14.2.8.Final.

Hibernate.4.2.8.Final取决于javassist-3.18.1-GA.不幸的是,websphere 8.5.5并没有附带最新的javassist,但它不是我的问题.我试图强制websphere采取我的javassist jar,但我失败了(由于某种原因它总是加载${WAS_INSTALL_ROOT}/plugins).

我尝试了什么?

  • 在websphere控制台和WEB-INF/lib中首先加载本地类加载器(父级最后一个)的类包含最新的javassist jar.但是申请不起作用
  • 把最新的javassit jar放进去${WAS_INSTALL_ROOT}/lib/ext但没用
  • 添加了共享库并在应用程序中引用但没有运气.
  • 如果我替换javassist.jar ${WAS_INSTALL_ROOT}/plugins然后应用程序开始工作但这不是一个好的解决方案,因为其他Web应用程序可能依赖于旧的javassist

我的问题

如何在Websphere 8.5.5中使用(或注入或引用)最新的javassist jar?

这个#blog帮助我很快解决了这个问题.

java websphere hibernate classloader javassist

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

如何在RxJs中将主题转换为Observable 5

我们如何在RxJs 5中将主题转换为Observable?此功能非常有用,例如,当我们希望公开Subject以进行订阅但又不想控制对其进行调用next()时,并且更愿意保持新值的发布.

文档(见这里)提到这样的事情:

var subject = new Rx.Subject();

var obs = subject.asObservable();
Run Code Online (Sandbox Code Playgroud)

但是在RxJs 5中这当前不起作用(alpha 8),我们得到以下错误:

"TypeError: subject.asObservable is not a function
Run Code Online (Sandbox Code Playgroud)

rxjs rxjs5

4
推荐指数
2
解决办法
4119
查看次数