我有一个可以将消息分解为多个消息块的功能。我需要将这些消息发布到我的发布功能。但是我不希望 Observable 阻止其他传入的帖子。我的解决方案是合并映射中的 concat 运算符的某种组合,但我似乎无法让它正常工作
我不确定我是否可以制作图表,但这是我的尝试:
-1-2------3|->
--4--5--6|->
desired output:
[4,5,6]
[1,2,3]
我需要请求 1 在 2 之前 3 和 4 之前 5 和 6 之前执行。用英语我想我会有一个可观察的可观察对象,我希望它映射到可观察的流,然后映射到每个可观察的输出流的标准数组. 我只是不确定如何做到这一点。很长一段时间以来,我一直在搞乱代码,试图将我刚才所说的概念化,这是我最好的尝试:
interface SendInfo {
message: discord.Message
content: string
options?: discord.MessageOptions
}
export const sendMessage$: Subject<SendInfo> = new Subject();
const regex = /[\s\S]{1,1980}(?:\n|$)/g;
export const sentMessages$ = sendMessage$.pipe(
mergeMap(
(input: SendInfo):
Observable<(discord.Message | discord.Message[] | null)[]> => {
const chunks: string[] = input.content.match(regex) || [];
const superObservable: Observable<Observable<discord.Message | discord.Message[] | null>> = concat(chunks.map(
(chunk: string):
Observable<discord.Message | discord.Message[] | null> => {
const bound = input.message.channel.send.bind(
undefined,
chunk,
input.options,
);
return Network.genericNetworkObservable<discord.Message | discord.Message[]>(
bound,
);
}
));
return superObservable.pipe(
mergeMap(e => e),
toArray(),
);
}
),
tap((e): void => Utils.logger.fatal(e)),
share(),
);
我的输出:
[2019-10-21T17:24:15.322] [FATAL] messageWrapper.ts:72 - [ { channel: { send: [Function] }, content: 'msg1' } ]
[2019-10-21T17:24:15.324] [FATAL] messageWrapper.ts:72 - [ { channel: { send: [Function] }, content: 'msg2' } ]
[2019-10-21T17:24:15.325] [FATAL] messageWrapper.ts:72 - [ { channel: { send: [Function] }, content: 'msg3' } ]
我觉得我接近一个解决方案,但我无法弄清楚如何将它完全合并到一个数组中。我也不知道它在功能上是否正确。