2017-08-29 79 views
1

我工作的一個Web應用程序中使用openHab API,並使用SSE控制一些光,但是當燈就亮了,我收到3消息在同一時間接收消息的多個時間相同的事件服務器發送事件

一個與值100 並且與光的實際值的兩個另外的相同的消息(例如45) 的值對應於光

eventSource.onmessage = (event: any) => { 
     this.val = JSON.parse(JSON.parse(event.data).payload).value; 
     console.log("new val " + this.val); 
     slid.value = this.val; 
     if(this.val >= 1){ 
     this.light = true; 
     button.checked= true; 
     } 
     else{ 
     this.light = false; 
     button.checked = false; 
     } 
    }; 

的亮度的%與問題是,我的進度那顯示光線在哪裏達到100%,然後下降到它應該和我想要的值爲了避免這種情況發生,有沒有什麼辦法可以阻止該消息或只爲最後收到的消息更新值?

謝謝。

回答

0

如果我們假設這是服務器端的問題或網絡問題,則可以在採取任何措施前增加0.1秒的等待時間來解決此問題。然後,如果三條消息同時到達,則只有第三條消息會觸發任何UI更改。粗略地這樣(未經測試的代碼,並且changeUI()中的changeUI()將一定需要整理出來):

var timer = null; 

eventSource.onmessage = (event: any) => { 
     this.val = JSON.parse(JSON.parse(event.data).payload).value; 
     console.log("new val " + this.val); 
     if(timer)clearTimeout(timer); 
     timer = setTimeout(changeUI, 100, this.val); 
     }; 

function changeUI(val){ 
    if(timer){clearTimeout(timer);timer=null;} //Redundant but harmless 
    slid.value = val; 
    if(val >= 1){ 
     this.light = true; 
     button.checked= true; 
     } 
    else{ 
     this.light = false; 
     button.checked = false; 
     } 
    }