组件 A 订阅服务 B 中的可观察对象:
A组份:
testMqtt(){
console.log('testMqtt is called');
this.serviceB.connectToBroker().subscribe({
next: (resp) => console.log('response from connection to mqtt: ', resp.connected),
error: (err) => console.log('error from connection to mqtt: ', err)
});
}
服务B:
connectToBroker(){
let client = mqtt.connect(this.url, {clientId: 'abc123'});
return of(client.on('connect', (packet) => {
console.log('testing value of connected: ', JSON.stringify(packet));
console.log('value of client connected: ', client.connected);
}))
};
这个想法是在“resp.connected”(组件A)中反映“client.connected”(服务B)的价值。当服务 B 中 connectToBroker() 内的 client.connected 值为 true 时,为什么 testMqtt() 中的 console.log 总是将 resp.connected 的值显示为 false?我可以在服务 B 中使用哪个 rxjs 运算符来允许在组件 A 中返回对订阅的响应之前完成 client.on 回调?
服务的代码正在使用回调,因此函数内的代码将执行,我不认为该值会被发出,回调运行后,您可以尝试使用
fromEvent
创建一个可观察的侦听器相反!
connectToBroker(){
let client = mqtt.connect(this.url, {clientId: 'abc123'});
return fromEvent(client, 'connect').pipe(
tap(() => {
console.log('testing value of connected: ', JSON.stringify(packet));
console.log('value of client connected: ', client.connected);
}),
);
};