ES6 비동기 생성기 및 이터러블을 사용하여 페이지 매김 빌드
🐠 발전기란?
글쎄, 정의에 따르면 :
Generators are functions which can be exited and later re-entered. Their context (variable bindings) will be saved across re-entrances.
팬시, 이것이 테이블에 무엇을 가져다 줍니까? 💭
아아 또 정의.. 💤
Generators in JavaScript -- especially when combined with Promises -- are a very powerful tool for asynchronous programming
현실 세계의 시나리오?
모든 정의를 읽은 후 핵심으로 넘어가 보겠습니다. :옥토캣:
해결해야 할 흥미로운 문제가 있었습니다. 오른쪽으로 스와이프할 때 모바일 앱 중 하나로 페이지 매김을 활성화하는 것이었습니다.
그래서 우리는 그것을 위해 발전기를 사용합니까?
다른 가능한 솔루션이 있습니다. 발전기는 더 깨끗한 솔루션일 뿐입니다.
그것을 하는 방법?
Create a generator
const asyncGetContent = async function* (){
const limit = 10; /* content per page */
let offset = 0; /* index of item to start from */
let totalCount = -1; /* -1 signifies failure */
while (offset === 0 || offset < totalCount) {
try {
const response = await (await fetch(<<url>>)).json();
offset = offset + limit;
totalCount = response["total-count"];
console.log(`offset + totalCount`, offset, totalCount);
yield response;
} catch (e) {
console.warn(`exception during fetch`, e);
yield {
done: true,
value: "error"
};
}
}
}
이해해야 할 내용이 많으므로 각 행을 살펴보겠습니다.
⛄ 선택한 결과에 대한 제한을 설정하는 변수를 정의하는
limit
[상수일 필요는 없음]⛄ fetch/axios/일부 API 호출을 준비하고
await
로 쏴서 결과 약속을 해결합니다.⛄
yield
응답. 반환은 .next()
를 사용하여 비동기 호출자가 사용하는 약속이 됩니다(다음 섹션에서 이에 대해 설명합니다).⛄ 가져오기를 처리하자
How do i use this?
다음과 같이 비동기 함수 내에서 시작하고 호출하기만 하면 됩니다.
const contentGen = await asyncGetContent(); /* initate the generator */
개시 후, 우리는 결과를 산출하기 위해 필요한 곳 어디에서나 호출할 수 있습니다(예: 오른쪽 스와이프/버튼 클릭)
const content = await contentGen.next();
필요에 따라
content
[이 경우 API의 응답]을 사용합니다.질문이 있는 경우 댓글로 알려주시면 피드백을 기다리겠습니다 🍻
Reference
이 문제에 관하여(ES6 비동기 생성기 및 이터러블을 사용하여 페이지 매김 빌드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jeevankishore/build-pagination-with-es6-async-generators-and-iterables-4l4p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)