Erlang 两次快速连续调用wf:insert_bottom end up,顺序相反
使用,我有以下方法接收消息并将其添加到html元素的底部:Erlang 两次快速连续调用wf:insert_bottom end up,顺序相反,erlang,nitrogen,Erlang,Nitrogen,使用,我有以下方法接收消息并将其添加到html元素的底部: receive_messages() -> receive Message -> io:format("~p received ~p", [self(), Message]), wf:insert_bottom(messages, [#p{}, #span { text=io_lib:format("~p", [Message]) }]) end, wf:comet_flush()
receive_messages() ->
receive
Message ->
io:format("~p received ~p", [self(), Message]),
wf:insert_bottom(messages, [#p{}, #span { text=io_lib:format("~p", [Message]) }])
end,
wf:comet_flush(),
receive_messages().
设置为comet的常规方式:
wf:comet(fun() -> receive_messages() end)
它很快收到两条信息:
<0.907.0> received {starting_chat,<0.905.0>}
<0.907.0> received {connected_to,<0.902.0>}
收到{开始聊天,}
收到{已连接到,}
这是我在HTML中看到的:
{connected_to, <0.902.0>}
{starting_chat, <0.905.0>}
{已连接到,}
{开始聊天,}
不知何故,他们以相反的顺序结束
我已经开始向这个方法添加timer:sleep()调用。50毫秒时,它们的顺序正确,20毫秒时则不正确。当它们以错误的顺序排列时,它们似乎总是以错误的顺序排列,这似乎是非常确定的
你知道为什么吗?这是虫子吗?除了睡觉,我还能做些什么让他们保持正确的顺序
另外,如果有更多信息。在应用内部收集内容后会有一个“奇怪”的反向调用。我的猜测是,内部收集的内容以前是尾部递归的
如果应用超时,您的消息将在不同的循环中逐个收集,因此顺序不再颠倒
似乎有一个提交正在另一个存储库上修复此问题: 在应用内部收集内容后有一个“奇怪”的反向调用。我的猜测是,内部收集的内容以前是尾部递归的 如果应用超时,您的消息将在不同的循环中逐个收集,因此顺序不再颠倒
似乎有一个提交正在另一个存储库上修复此问题: