비동기식 디더링 모드 도입
14009 단어 showdevwebdevproductivityjavascript
async
/await
비선형 경로를 가진 비동기 코드를 작성하는 것이 쉬워졌습니다.그러나 현재 이 층은 최종 형태로 안정되어 UI 개발에 사용할 수 있는 더 높은 층 모델을 구축하는 방법을 고민하는 것이 좋은 생각이다.
모든 전형적인 사용자 인터페이스는 기본적으로 두 부분으로 나뉜다.이 정보의 입력을 내비게이션/필터링/변경하는 것 외에도 많은 정보가 있다.이 모든 것은 서버에서 발생하는데, 앞부분은 그 중의 한 보기일 뿐이다.즉, 프런트엔드와 API는 사용자 입력에 반응하기 위해 자주 통신해야 합니다.만약 네가 이미 충분한 시간을 했다면, 너는 알게 될 것이다.
예상 트래픽
좋아, 그럼 우리는 이렇게 하지 말자.아니면 더 정확히 말하면 일하면 영원히 편안해지고 더 쉬운 심리 패턴을 견지한다.
UI와 같은 실시간 검색을 하고 있다고 가정해 보세요.네가 입력을 하나 입력하면 결과는 아래에 나타날 것이다.테두리 상자를 거두어라.당신은 그것을 어떻게 생각합니까?
__call__()
validate()
prepare()
run()
success()
또는 오류(failure()
cleanup()
run()
어떤 임무를 하든지 이렇게 추상적으로 할 수 있다.특히 대부분의 경우 axios
또는 다른 HTTP 라이브러리를 통한 단일 API 호출로 약속이 되돌아왔기 때문이다.물론 사용자가
run()
동안 을 클릭하면 어떻게 됩니까?첫 번째 요청을 실행하기 전에 기다리려면 어떻게 해야 합니까?나는 가능한 가장자리 상황을 고려하여 이 그림을 얻었다.다 이해해야 돼요?그렇게 지도 모른다, 아마, 아마...모든 화살표, 연결, 연결은 가능한 한 정교하다고 여겨지기 때문에 필요하다면 더욱 추진할 수 있다.만약 이것이 네가 하고 싶은 일이라면, 너는 분명히 그것을 이해해야 한다.만약 없다면, 단지 설명을 따르고, 간소화 모델을 기억하면, 모든 것이 좋아질 것이다!
코드 예제
물론 나는 도표에 머무르지 않았다.코드야말로 가장 중요한 것이지, 그렇지?
소개wasync/debounce!
이 예에 대해 우리는 debounce demo의 계발을 받은 코드를 배울 것이다.
우리는 지금 시뮬레이션 검색을 진행하고 있다.아날로그 함수에 들어가는 것을 입력하십시오. 이 함수는 1초 후에 조회를 표시하고 결과를 표시합니다.이 모든 것은 Vue 구성 요소로 이루어집니다.
간단한 템플릿:
<div class="debounce">
<div>
<input type="text" v-model="search">
</div>
<ul>
<li>Search = {{ search }}</li>
<li>Result = {{ result }}</li>
<li>Loading = {{ loading }}</li>
</ul>
</div>
우리는 몇 가지 변수에 의존한다.search
검색 검색 텍스트 result
이 조회loading
는 현재 로드 상태를 나타내는 플래그입니다import {ObjectDebounce} from 'wasync';
export default {
// ...
watch: {
search: new ObjectDebounce().func({
// insert code here
})
},
}
지금부터 우리는 함수의 출력을 떨기 위해 new ObjectDebounce().func()
을 호출할 것이다.보시다시피 디더링 함수는 Vue 값을 관찰하는 데 직접 사용할 수 있습니다(이 예에서는 텍스트 검색).Vue 모니터링 시스템으로 인해
search()
값이 변경될 때마다 이 값은 search
함수에 매개 변수로 전달됩니다. validate(search) {
return {search};
},
디더링 함수를 호출하는 매개 변수 (이 예에서 검색 값) 를 갈고리 validate()
에 한 글자씩 전달합니다.이 갈고리는 두 가지 작용이 있다.입력을 확인합니다.입력 값이 좋지 않으면false ish 값을 되돌려야 합니다.
실행 매개 변수를 생성합니다.
validate()
의 반환값은 매개변수로 전달됩니다 run()
.객체를 되돌리려면 실행 중에 변이가 발생하지 않는 복사본인지 확인합니다. prepare() {
this.loading = true;
},
prepare()
갈고리를 사용하여 UI 로드를 준비할 수 있습니다.이 경우 loading
로고를 true
로 설정하면 됩니다. cleanup() {
this.loading = false;
},
다른 한편, 함수가 실행을 마쳤을 때, 우리는 로더 프로그램을 사용하지 않기를 희망합니다. loading
를 false
로 설정하기만 하면 됩니다. run({search}) {
return doTheSearch({search});
},
그것은 메인 요리다.이곳은 우리가 실제로 일하는 곳이다.여기에서, 그것은 doTheSearch()
함수로 표시되지만, 당신이 하고 싶은 모든 비동기적인 일을 할 수 있다.run()
가 반환 Promise
되면 기다립니다.run()
의 첫 번째이자 유일한 매개 변수는 validate()
의 반환값이다.run()
호출을 초래하고 다른 호출은 버려진다.failure()
갈고리 success(result) {
this.result = result;
},
run()
로부터 반환/해석 값을 첫 번째이자 유일한 매개 변수로 성공적으로 수신했습니다.그럼 네가 뭘 좀 해줘! failure(error) {
alert(error.message);
},
일이 항상 계획대로 진행되는 것은 아니다.run()
이상이 발생하거나 거부되면 이 이상은 failure()
의 첫 번째이자 유일한 매개 변수로 전달됩니다.요점을 요약하여 다시 말하다.
마지막으로, 우리의 구성 요소는 다음과 같다.
<template>
<div class="debounce">
<div>
<input type="text" v-model="search">
</div>
<ul>
<li>Search = {{ search }}</li>
<li>Result = {{ result }}</li>
<li>Loading = {{ loading }}</li>
</ul>
</div>
</template>
<script>
import {ObjectDebounce} from 'wasync';
function doTheSearch({search}) {
return new Promise((resolve) => {
setTimeout(() => resolve(`You searched "${search}"`), 1000);
});
}
export default {
data() {
return {
search: '',
result: '',
loading: false,
};
},
watch: {
search: new ObjectDebounce().func({
validate(search) {
return {search};
},
prepare() {
this.loading = true;
},
cleanup() {
this.loading = false;
},
run({search}) {
return doTheSearch({search});
},
success(result) {
this.result = result;
},
failure(error) {
alert(error.message);
},
})
},
}
</script>
비록 이것은 보잘것없어 보이지만, 실제로는 전투를 거친 코드이며, 사용자에게 그들의 조작이 무엇이든지 간에 매끄러운 체험을 제공할 것이다.vue-cli 덕분에 독립형 Vue 구성 요소를 테스트할 수 있습니다.
결론
일부 비동기 자원과 사용자의 상호작용과 관련된 흔한 문제는 매우 복잡한 모델을 통해 해결할 수 있지만, 다행히도 이 모델은
wasync
패키지의 유니버설 라이브러리로 분해되었다.이것은 간단한 Vue 구성 요소에서 실제 응용되었다. 이 구성 요소의 코드는 매우 간단하고 실제적으로 당신이 생산에서 사용하는 코드에 매우 가깝다.
그것은 몇 가지 항목의 경험에서 비롯되었는데, 이 항목들은 결국 하나의 라이브러리로 분해되었다.나는 모두가 이 점에 대한 피드백을 받고 싶다. 다른 이미 사용된 해결 방안을 원한다. 만약 당신이 그것을 당신의 수요에 응용할 수 있다고 생각한다면!
Reference
이 문제에 관하여(비동기식 디더링 모드 도입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/xowap/introducing-the-async-debounce-pattern-36ff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)