我有一个机器人,收到来自X用户的消息后,发送消息的地方,并收到他发送回X用户的响应。X用户可以根据他收到的响应发送另一条消息,机器人将回复第一个响应,并发回第二个响应X用户。我需要有一种方法来存储所有thoses响应到一个ID,并能够回到他们。
先谢谢你了。
我尝试使用一个Map,其中一个键作为ID,而响应作为数组来存储其他的ID,但是我在跟踪该ID时遇到了问题。
下面是一个例子:
Poui to the Bot:“嗨123”
机器人到服务:“一百二十三”
服务机器人:“XXX”(这是第一个回答)
Bot到Poui:“XXX”
机器人对Poui说:“如果你想更多地互动,请在消息的开头写上“{id}”。”
Poui to bot:“{id} U1”
Bot to Service * 对第一回复的响应 *:“U1”
机器人服务:“YYY”(这是第二个响应)
Bot到Poui:“YYY”
1条答案
按热度按时间tp5buhyn1#
几乎可以肯定,你真实的的问题是如何处理异步代码。异步代码有三种策略:
1.回调
1.承诺
async
/await
我假设你知道它们是什么。如果不知道,你可以在很多地方找到它们的解释。例如this blog post。(注意,可能需要一定的尝试和错误才能解释清楚。)
我将使用JavaScript来完成我的解释,因为我更了解它。但是在JavaScript和typescript之间进行转换相当容易。
现在的诀窍是,你想要有代码来处理Poui,看起来像这样:
好吧,我们刚刚把问题推到了别处,这有什么帮助?
serviceCommunicator
是一个具有以下字段的对象。id
对象的id。fromUser
,来自用户的消息数组。toUser
,带有对用户的回复的promise数组。它们被立即添加,但将在它们被解析时被解析。1.你觉得有用的都行。
现在我们可以通过
id
将所有的服务通信器保存在一个map中,这样我们就可以很容易地返回它们。字面上,如果你传递了一个id
,只需查找并返回它。如果没有,用new id构造一个新对象,将其添加到map中,并返回它。serviceCommunicator.request(message)
是如何工作的呢?我们从下面的例子开始:现在每个请求都得到了正确的响应,
serviceCommunicator
知道用户说过的所有事情,哪些已经得到了响应,如果得到了响应,响应是什么。请注意,内部返回的响应还包括此消息在数组中的位置。如果您实际上想查看逻辑中以前的消息/响应,知道您在该流中的位置可能非常有用。
(Note,使用这种策略,React可能会出现混乱。这是可以修复的,但这种解释已经足够长了。)