gpt4 book ai didi

javascript - RxJS - 将 "Object"事件转换为包含所有对象的 "Array"

转载 作者:行者123 更新时间:2023-12-02 21:11:14 24 4
gpt4 key购买 nike

上下文:

我有一个 Websocket 端点。该 WS 传输一组消息。每条消息都有一组我想要访问的数据,以便提供可视化效果。

问题:

可视化仅接受数组。并且 WS Endpoint 只有对象。我想将单个对象转换为对象数组。

代码:

  webSocketRequest.onopen = () => {
webSocketRequest.send(JSON.stringify(firstMessage));
webSocketRequest.onmessage = (streamEvent) => {

return of(streamEvent).pipe(
map(event => JSON.parse(event.data)),
filter(message => message.type === 'RECORD'), // Here I filter only for the Object I want
tap(rec => console.log(rec.data.value)) // This returns my desired individual objects
).subscribe();
};
};

从那时起,我就面临了一堵墙。有人可以帮我吗?本质上,我想将所有对象转换为包含所有对象的数组。谢谢!!

最佳答案

如果我理解正确的话,您想要维护一个消息列表,并将通过 websockets 传入的每条新消息附加到此列表。

  1. 直接方法:在消费者中创建数组,并在 .subscribe() 回调中修改它:
const messages = [];
of(streamEvent)
.pipe(...your pipe here...)
.subscribe(message => messages.push(message))

  • 更奇特一点 - 您可以直接在管道中执行此操作,每次附加新消息时,生成的可观察对象都会发出更改后的数组:
  • of(streamEvent)
    .pipe(
    ...your pipe here...,
    scan((messages, msg) => [...messages, msg], []),
    startWith([])
    )

    这允许您将此可观察量传递给不同的最终消费者,他们将能够在数组发生变化时使用它,而无需重复逻辑

    关于javascript - RxJS - 将 "Object"事件转换为包含所有对象的 "Array",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61090158/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com