我目前正以下列方式使用一个observable:
this._socket.onMessage.subscribe(
(message) => {
}
);
工作正常!但是,是否可以将变量传递给允许某些逻辑的observable?
例如,通过将变量“name”传递给onMessage,我只能订阅名称特定的事件?像这样:
this._socket.onMessage(name-variable).subscribe(
(message) => {
// only get events that is related to the name-variable
}
);
答案 0 :(得分:4)
您必须创建可产生所需效果的辅助函数。
fn sort<A, T>(mut array: A) -> A
where
A: AsMut<[T]>,
T: Ord,
{
let slice = array.as_mut();
slice.sort();
array
}
fn main() {
let a = [1, 3, 2];
assert_eq!(sort(a), [1, 2, 3]);
}
更高级的方法是创建自己的类,扩展其中一个public getMessagesForName(name: string): Observable<any> {
return this._socket.onMessage.filter((message) => {
return message.name === name;
});
}
类。像Subject
或EventEmitter
一样,并在那里添加辅助函数。然后,您只需将过滤器应用于Subject
参考。
以下是一个例子:
this
这一切都取决于你需要多少重复使用。
答案 1 :(得分:3)
编辑:请参阅ThnkingMedia的答案
我不确定你是否可以使用你正在寻找的语法来做到这一点,但是你可能会做一些事情
let flag: boolean = someProperty;
this._socket.onMessage.subscribe(
(message) => {
if (flag) { // do something
}
}
);
另外,我非常确定您的Observable可以使用filter()调用。所以Observable可能会改变
myObservable.filter(...).map(...).subscribe(....)
//where myObservable is the Observable object you're working with
答案 2 :(得分:1)
对于需要此功能的任何人,您可以通过以下方式将变量传递给可观察对象并同时使用观察者:
function onMessage(message): Observable<any>{
return new Observable(observer => {
socket.message(message).subscribe(result => {
observer.next(result);
});
});
}
这样你就可以像这样使用它:
onMessage('Hello World').subscribe(msg => {
alert(msg);
});
答案 3 :(得分:0)
我不太明白你的意思,但是你可以将值传递给Observable。代码非常简单
returnCustomObservable() {
return Observable.of('Your value here');
}
但是,如果我找到你的话,这意味着你必须重写onMessage
函数来为它提供你想要的值。
答案 4 :(得分:0)
你可以通过一个小的设计转变来做类似的事情:
function handleFoo(data) {}
function handleBar(data) {}
const messageGroups = {
foo: handleFoo
bar: handleBar
}
this._socket.onMessage.subscribe(
(message) => messageGroups[message.type](message)
);
这将允许对特定消息组进行更通用的处理,这是实现MDN建议的一种更简洁的方法:https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications#Receiving_messages_from_the_server