2012-10-09 9 views
2

Ok. 이 질문에 대한 코드가 없습니다. 나는 자바 스크립트에 익숙하지 않기 때문에 이것을 묻습니다. JS에서 시간이 지정된 대기열을 만드는 방법을 알고 싶습니다. 여기에 속임수입니다.자바 스크립트에서 시간을 대기열로 만드는 방법

나는 콤보 박스를 가지고 있습니다. 콤보 상자에는 extjs 데이터 저장소가 있으며 5 초마다 새 데이터로 업데이트됩니다. 즉, 콤보가 새 행 항목을 가져옵니다.

행 항목은 3 가지 유형 1,2 및 3이 될 수 있습니다. 동일한 유형이지만 행 ID가 다른 여러 행이있을 수 있습니다. 5 분 동안 업데이트가 없으면 각 행이 콤보에서 제거됩니다. 즉, 유형 3의 상점에서 새 행을 얻으면 5 분 동안 콤보로 유지됩니다. 새로운 데이터에 같은 행이 표시되면 (동일한 ID 및 유형) 5 분 타이머가 재설정되고 다시 5 분이 계산됩니다. 기타 등등.

어떻게 자바 스크립트에서이 기능을 수행 할 수 있습니다.

이해가되지 않는 경우 의견을 남겨주세요.

row_1 type1 5 min timer start 
row_2 type1 5 min timer start 
row_3 type3 5 min timer start 
row_2 type2 5 min timer start 

이 페치 현재 데이터의 예이다 : 여기

는 일례이다. 3 분 후에이 데이터를 얻습니다. 5 분의 한계에 도달 할 때까지

row_3 type3 5 min timer start 

행 타이머의 나머지 부분은 계속하지만 행 세를위한 타이머가 재설정됩니다 그것은 다음 5 분 동안 콤보에 남아있을 것입니다. 다른

+1

일정한 간격으로 작업을 수행하려면 "setInterval"명령이 필요합니다. –

+0

@Vlad - 이것에 대한 적절한 대답을 찾지 못하셨습니까? 당신은 답이나 질문 자체에 대해 언급하지 않았습니다. – FrankieTheKneeMan

답변

0

이 문제는 usign 세션으로 해결되었습니다. 최신 데이터가 세션에서 작성되었으므로 새 요청은 세션의 데이터에 따라 수행되었습니다. 나는 콘서트에서 PHP와 JS를 사용했다. Js는 물통 php 세션을 읽었습니다

1

어딘가에 :

function ComboRemoval(id) 
{ 
    Lookup your combobox (document.findelementbyid perhaps) 
    Find element with value "id" 
    remove it 
} 

콤보 상자에 요소를 추가 :

Add the element 
setInterval(function() { ComboRemoval(1234)}, 300000); //FIXED AS PER COMMENTS BELOW 

setInterval을 5 분에서 기능 ComboRemoval을 발사되며,이 상자에서 ID 1234을 제거합니다.

300,000 = 5 분 (1,000 = 1 초, 60 × 5 = 300 초, 300 = 300,000 X 1,000)

+0

'setInterval (ComboRemoval (1234), 300000);'당신이 원하는 것을하지 않을 것입니다. 그러면 타이머가 작동 할 때 즉시 호출하지 않고 'ComboRemoval'을 즉시 호출합니다. – jfriend00

+0

당신은 맞습니다. – Gherkin

+0

이렇게하면 지난 5 분 동안 업데이트되지 않은 항목이 아니라 5 분 후에 모든 항목이 제거됩니다. 'clearTimeout'은 OP가 원하는 효과를 내기 위해 필요합니다. – FrankieTheKneeMan

1

은 당신의 setTimeout 호출 재귀 함수()

예 활용해야 :

function myFunc() { 
    var minutes = 5; 
    //do stuff here 
    setTimeout(function() { myFunc() }, minutes*60000 }; 
} 

myFunc()가 호출되면 5 분 타이머로 자신을 호출합니다. 나머지 프로그램 로직은 최종 결과에 100 % 의존합니다.

+1

이것은 오류가 아닙니다. 자체 문서화 변수에있는 단순한 선택입니다.'minutes'는 실제로 대기 할 초 수를 저장합니다. 추가적으로, 이것은 OP가 원하는 것일 수도 아닐 수도있는 5 분마다 한 번만 업데이트됩니다. – FrankieTheKneeMan

+0

@Frankie 그렇습니다 ... 동의합니다 ... 습관적으로 저는 한 곳에서 시간 변수를 할당합니다. setTimeout() 호출과 setTimeout() 내에서 항상 ms (1000) 곱셈을 수행했습니다. 그것을 지적 해 주셔서 고마워요, 그것이이 질문과 관련하여 즉각적인 혼란을 일으키는 경우 대중을 위해 그것을 바꿀 것입니다 =)) –

3
당신은 여기에 두 가지의 트랙을 유지해야 할거야

:. 실제 항목을, 그리고 마지막 때 또는, 더 정확하게, 타임 아웃 이벤트가있는을 업데이트합니다 (업데이트

timeouts = []; 
elems = []; 
function updateElem(no){ 
    //Do your update on elems[no] 
    clearTimeout(timeouts[no]); 
    timeouts[no] = setTimeout(function(){ removeElem(no) }, 5*60*1000); 
} 
function removeElem(no){ 
    //Remove the element. 
} 

이 기본 개념을 보여줍니다.이 묶여 모든 것을 유지하기 위해 더 나은 방법이 있지만, 기본적인 아이디어는 다음과 같습니다

  • 세트가 개체에 대한 제한 시간 5 분 후에 제거하는
  • 객체 업데이트하는 경우 :
    • 지우기 이전을 시간 제한
    • 설정 새로운 타임 아웃
    JS 진정한 멀티 스레드 아니기 때문에

, 당신은 시간을하지 않습니다 동시성 문제에 대해 걱정할 필요가 없습니다. 범위를 알아내는 한.

Check this documentation 타임 아웃 이벤트가 완전한 방식으로 작동하는 방식을 확인하십시오.

1

건물 @ 작은 오이의 대답, 사용에 따라 jQuery를이 :

이제
function addOption(key, text, timeout) { 

    var el = $("<option></option>") 
     .attr("value",key) 
      .text(text); 
    ​$('#test').append(el); 
    setTimeout(function() { el.remove(); }, timeout); 
} 

당신이 호출 할 수

addOption("value", "Text for option", 2000); 

가 직접보기 : http://jsfiddle.net/um9Cu/

당신은 addOption()도로를 확장 할 수 기존 항목을 키로 검색하고 제한 시간을 연장하거나 필요한 작업을 수행하십시오.

관련 문제