اثنين من مكالمات سريعة متتالية إلى WF: insert_bottom في نهاية المطاف في الترتيب العكسي

StackOverflow https://stackoverflow.com/questions/2002487

  •  18-09-2019
  •  | 
  •  

سؤال

استخدام النيتروجين، إطار ويب Erlang, لدي الطريقة التالية التي تتلقى الرسائل وتضيفها إلى أسفل عنصر 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().

يتم تعيينه باعتباره الطريقة المعتادة للتزلج:

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 ليسوا كذلك. عندما تكون في الترتيب غير الصحيح، يبدو أنهم دائما في الترتيب غير الصحيح، يبدو حتميا جدا.

أي أفكار لماذا؟ هذا الخلل؟ أي أفكار ماذا علي أن أفعل للحصول عليها بالترتيب الصحيح بخلاف النوم؟

أيضا طلب في القائمة البريدية, ، في حالة وجود مزيد من المعلومات هناك.

هل كانت مفيدة؟

المحلول

wf_comet.erl. لديه مكالمة عكسية "غريب" بعد تطبيق inner_collect_content. تخميني هو أن Inner_collect_content اعتاد أن يكون التكريم في وقت ما.

إذا قمت بتطبيق المهلة، يتم جمع رسائلك في حلقات مختلفة، واحدة تلو الأخرى، لذلك لا يتم عكس النظام بعد الآن.


يبدو أن هناك ارتكاب إصلاح هذا على مستودع آخر:

http://github.com/gersh/nitrogen/COMMIT/A8BCB23D003E68F7394A0455285BEEB0FBF9B09.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top