JS 폴링의 ABC

아니, 그런 종류의 바보같은 투표가 아니야! 일정 시간 간격으로 주어진 함수를 반복적으로 호출하는 것을 의미하는 JavaScript 유형입니다. 쉽게 들리나요? 글쎄요, 당신의 좋은 날을 망치고 싶지 않아요.

코드에서 Tennet이 발생하는 것을 원하지 않습니다.



"대단한 일이 뭐지? 그냥 setInterval을 사용하세요!"라고 생각할 수도 있습니다. 그렇게 빠르지 않아!

function callMe() {
  // sync stuff
  console.log('Aye there!')
}

setInterval(callMe, 1000)

// logs
// [0:01] Aye there! 
// [0:02] Aye there! 
// [0:03] Aye there! 

동기 함수를 폴링하는 데 적합해 보일 수 있습니다. 비동기식으로 만드는 부작용을 추가하면 여기에 완전히 다른 이야기가 있습니다. 비동기 함수는 폴링 간격보다 긴 시간에 결과를 산출할 수 있습니다.

let calls = 0
async function callMe() {
  calls++
  const callNo = calls
  // async stuff
  console.log(`Call #${callNo}`)
}

setInterval(callMe, 1000)

// logs
// [0:01] Call #1
// [0:03] Call #3
// [0:05] Call #2
// [0:08] Call #4

이것은 코드에 심각한 오류를 일으킬 수 있는 혼란입니다. 결과 사이에 일정한 시간 간격이 없습니다. 더 중요한 것은 연대기가 모두 엉망이라는 것입니다! Chris Nolan은 행복하겠지만 우리는 그렇지 않습니다!

올바른 순서로 호출을 받으려면 다음이 필요합니다.
  • 전화 걸기
  • 함수가 무언가를 반환할 때까지 기다림
  • 정의된 지연 시간을 기다립니다
  • .
  • 처음으로 돌아가기

  • 물건 얻기



    데이터를 다시 가져오는 것은 약간 까다로울 수 있습니다. 대부분의 경우 폴링된 함수는 흥미로운 결과를 반환합니다. 이 데이터를 검색하려면 콜백 함수가 필요합니다. 많은 콜백을 허용하기 위해 이벤트를 첨부할 수도 있습니다. 특정 응답이 도착하고 조건이 충족되면 폴링을 중지하고 싶을 수 있으므로 유용합니다. 또는 이러한 응답으로 다른 논리를 제공합니다.

    어... 뭐?



    폴링은 오류가 발생하기 쉽습니다. 특히 원격 서버에서 일부 API를 호출하는 함수를 호출할 때 그렇습니다. 서버 측의 네트워크 오류 또는 결함으로 인해 해당 호출 중 일부가 거부될 수 있습니다. 그러나 오류에 관계없이 폴링을 계속하고 싶을 때가 있습니다. 결과 호출이 실제 유효한 데이터를 반환할 수 있습니다. 특정 수의 연속 실패가 발생할 때만 폴링을 중지할 수 있어야 합니다.

    꽃가루 매개자 🐝



    나는 이러한 모든 문제 등을 해결하는 데 사용할 수 있는 작지만 바쁜 작은 모듈을 작성했습니다. 예, 우리는 다시 게을러질 수 있습니다! 가장 큰 장점:
  • 매우 작고 907B(맞습니다, 바이트)만 축소되고 gzip으로 압축됨
  • 원할 때 언제든지 시작, 중지 및 일시 중지할 수 있습니다
  • .
  • 은 현재 및 이전에 반환된 데이터
  • 를 기반으로 조건을 충족할 때 폴링을 중지할 수 있습니다.
  • 이벤트 기반
  • 안전한 재시도 횟수를 구성할 수 있는 챔피언과 같은 오류를 처리합니다
  • .
  • TS로 작성!
  • 노드 및 브라우저 호환 가능

  • 그런 곳이 보이면 한번 가보세요! 그것이 당신을 위해 약간의 노력을 절약하기를 바랍니다.


    인스피무어 / 수분 조절제


    모든 기능을 폴링하는 경량 js 라이브러리. 노드 및 브라우저 호환.





    BTW 피드백은 환영 이상입니다!

    좋은 웹페이지 즐겨찾기