Javascript Polling

Dae-Hee·2023년 4월 23일
0
post-thumbnail

Polling
Client 가 일정시간 내에 데이터를 얻기 위해 Request 를 Server 에 보내는 기술


const poll = async ({ fn, validate, interval, maxAttempts }) => {
	let attempts = 0;

	const executePoll = async (resolve, reject) => {
		const result = await fn();
		attempts++;
		if (validate(result)) {
		  return resolve(result);
		} else if (maxAttempts && attempts === maxAttempts) {
		  return reject(new Error('Exceeded max attempts'));
		} else {
		  setTimeout(executePoll, interval, resolve, reject);
		}
	};

	return new Promise(executePoll);
};
  • poll함수는 함수를 반환하는 고차 함수

  • executePollPromise을 반환하고 중지 조건이 충족될 때까지 재귀적으로 실행

  • poll 함수의 인수 네가지

    • fn: 주어진 간격으로 실행할 함수(일반적으로 API 요청)
    • validate: 이것은 또한 데이터가 우리가 원하는 것과 일치하는지 확인하기 위해 테스트를 정의하여 투표를 종료하는 기능이기도 합니다. 예를 들어 데이터가 존재하는지 간단히 테스트하거나 응답의 중첩된 속성이 특정 상태에 도달했는지 확인
    • interval: 폴링 요청 사이에 대기하려는 시간
    • maxAttempts: 최대 폴링 요청 수 설정

  1. API를 폴링한 횟수를 추적하기 위해 클로저를 형성하는 attempts 변수를 선언

  2. excutePoll 함수를 선언하여 프로미스를 반환

  3. executePoll을 재귀적으로 계속 호출하고 유효한 값에 도달할 때까지만 resolve

  4. 반환되면 attempts를 증가

  5. fn에서 가져온 result에 대해 validate를 호출하고, 그 결과가 true이면 값을 성공적으로 resolve

  6. 결과가 유효하지 않은 경우 최대 폴링 시도 횟수에 도달했는지 확인하고 그렇다면 오류를 throw

  7. 그렇지 않으면 지정된 interval에 대한 setTimeout을 호출한 후 함수를 재귀적으로 호출하여 폴링을 다시 시도


Reference

0개의 댓글