비동기 JS 이해
Async JS의 목표: 백그라운드에서 실행되는 장기 실행 작업을 처리하는 것
- 사용 사례: AJAX 호출을 통해 원격 서버에서 데이터를 가져옵니다.
- 예. img 소스 설정, 타이머, 약속, Fetch API, Async-Await, Geolocation API, 오류 처리.
동기화 코드:
- 실행 컨텍스트의 일부인 실행 스레드에 의해 작성된 순서대로 한 줄씩 실행됩니다.
- Dis: AJAX 호출, D/B 액세스, 경고 창 등과 같이 코드 한 줄을 실행하는 데 시간이 오래 걸려 완료될 때까지 코드 실행을 차단하는 경우.
비동기 코드
- 타이머는 코드를 차단하지 않고 백그라운드에서 실행됩니다. 즉, 실행의 기본 스레드를 차단하지 않습니다.
- 비동기 코드는 백그라운드에서 실행되는 작업이 완료된 후 실행됩니다.
- 실행은 비동기 작업이 작업을 완료할 때까지 기다리지 않습니다.
- 비동기 - 동시에 발생하지 않습니다.
- 콜백은 코드를 자동으로 비동기화하지 않습니다. 전. 배열 맵 메소드는 콜백을 수용하지만 코드를 비동기화하지는 않습니다. 타이머와 같은 특정 기능만 비동기 방식으로 작동하지만 모든 콜백이 작동하는 것은 아닙니다.
const p = document.querySelector('.p'); setTimeout(function(){ p.textContent = "Welcome to JS"; }, 3000); // C/b executes after duration. p.style.color = 'red';
Ex. Setting source of an img is an async operation, while rest of the code is running. Once the image is loaded completely, a load event will be emitted by JS for which we can listen. const img = document.querySelector('.cat'); img.src = 'cat.jpg' img.addEventListener('load',function(){ img.classList('fadeIn'); }); p.style.width = '300px';
- 이벤트 리스너만으로는 코드를 비동기화할 수 없습니다. 예를 들어 버튼 클릭 리스너는 백그라운드에서 어떤 작업도 수행하지 않습니다. 따라서 비동기 동작이 포함되지 않습니다.
아약스
- 비동기 방식으로 원격 웹 서버와 통신할 수 있습니다.
- AJAX 호출을 사용하여 웹 서버에서 동적으로 데이터를 요청합니다.
API
- 다른 소프트웨어가 사용하는 소프트웨어로 앱간 통신이 가능합니다.
- 예. DOM API, Geoloaction API 등은 모두 소프트웨어가 상호 작용할 수 있는 자체 포함된 소프트웨어입니다.
- 클래스를 사용하고 일부 메소드를 공개함으로써 API를 구현할 수 있습니다.
- 온라인 API: 서버에서 실행되는 애플리케이션으로, 데이터 요청을 받고 응답으로 데이터를 다시 보냅니다.
- API는 백엔드 개발을 사용하여 구축되거나 다른 개발자가 무료로 제공하는 타사 API를 사용합니다.
- 예. 거의 모든 것에 대한 샘플 API가 있습니다.
- 이전에는 XML을 사용했지만 이제는 문자열로 변환된 JS 객체인 JSON만 사용합니다.
# First API Call: Older way of doing AJAX using XHR. Modern way uses fetch API. - CORS need to be Yes/Unknown to access 3rd party APIs from our code. - AJAX call is done in the background, while the rest of the code keeps running which makes it non-blocking. - Hence, register a callback for the load event on request object. - Request is sent in the background, when its complete 'load' event will be fired. As soon data arrives, Callback fn will be called. HTML: <main class="container"> <div class="countries"> </div> </main> JS: const getCountryData = function(country){ const btn = document.querySelector('.btn-country'); const countriesContainer = document.querySelector('.countries'); // 1. request created const request = new XMLHttpRequest(); // 2.request opened request.open("GET", `https://restcountries.com/v3.1/name/${country}`); // 3. request sent request.send(); // 4. When data arrives, load event will be fired & below C/b will be invoked. // 5. response arrives in the property responseText of request object in JSON i.e big string of text will be received from AJAX call which needs to be converted to JS object. // 6. Convert JSON to JS. request.addEventListener("load", function () { // console.log(this); this refers to request object here. 'this' can be replaced with request object. // console.log(this.responseText); will only be set when data has arrived. // Both lines yield same result below. //const [ data ] = JSON.parse(this.responseText); const data = JSON.parse(this.responseText)[0]; console.log(data); const html = `<article class="country"> <img src=${data.flags.svg} alt="" class="country__img"> <div class="country__data"> <h3 class="country__name">${data.name.common}</h3> <h4 class="country__region">${data.region}</h4> <p class="country__row"><span>${(+data.population / 1000000).toFixed(1)}</span> mn</p> <p class="country__row"><span>${data.languages[Object.keys(data.languages)[0]]}</span></p> <p class="country__row"><span>${data.currencies[Object.keys(data.currencies)[0]].name}</span></p> </div> </article>`; countriesContainer.insertAdjacentHTML('beforeend', html); countriesContainer.style.opacity = 1; }); }; // All AJAX calls are happening in parallel getCountryData('usa'); getCountryData('russia'); getCountryData('germany'); getCountryData('brazil'); getCountryData('india');
콜백 지옥:
- AJAX 요청을 연결하면 순서대로 작동합니다. 즉, 첫 번째 요청이 완료된 후 두 번째 요청이 생성됩니다.
- 순서대로 이루어져야 하는 중첩된 AJAX 호출에 대해 정의된 중첩된 콜백으로 인해 발생합니다.
// This below triangular shape denotes callback hell. Makes code hard to maintain. // GPP: Code which is hard to understand is bad code, hence difficult to add features // Promises help us to resolve this Callback Hell problem. setTimeout(() => { console.log("1 sec passed"); setTimeout(() => { console.log("2 sec passed"); setTimeout(() => { console.log("3 sec passed"); setTimeout(() => { console.log("4 sec passed"); setTimeout(() => { console.log("5 sec passed"); }, 1000); }, 1000); }, 1000); }, 1000); }, 1000); // Get the neighbouring countries const renderCountry = function (data) { const btn = document.querySelector(".btn-country"); const countriesContainer = document.querySelector(".countries"); const html = `<article class="country"> <img src=${data.flags.svg} alt="" class="country__img"> <div class="country__data"> <h3 class="country__name">${data.name.common}</h3> <h4 class="country__region">${data.region}</h4> <p class="country__row"><span>${(+data.population / 1000000).toFixed( 1 )}</span> mn</p> <p class="country__row"><span>${ data.languages[Object.keys(data.languages)[0]] }</span></p> <p class="country__row"><span>${ data.currencies[Object.keys(data.currencies)[0]].name }</span></p> </div> </article>`; countriesContainer.insertAdjacentHTML("beforeend", html); countriesContainer.style.opacity = 1; }; const getNeighbours = function (country) { const request = new XMLHttpRequest(); request.open("GET", `https://restcountries.com/v3.1/name/${country}`); request.send(); request.addEventListener("load", function () { const [data] = JSON.parse(this.responseText); console.log(data); renderCountry(data); const [neightbour] = data.borders; if(!neightbour) return; // request2 is Dependent on request1 as its invoke after request1. request2 will its own event listener. const request2 = new XMLHttpRequest(); request2.open("GET", `https://restcountries.com/v3.1/alpha/${data.borders}`); request2.send(); request2.addEventListener("load", function () { const [data2] = JSON.parse(this.responseText); console.log(data2); renderCountry(data2); }); }; getNeighbours("italy");
위 내용은 비동기 JS 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Stock Market GPT
더 현명한 결정을 위한 AI 기반 투자 연구

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

이 기사는 JavaScript를 사용하여 이미지를 클릭하는 효과를 얻는 방법을 소개합니다. 핵심 아이디어는 HTML5의 데이터-* 속성을 사용하여 대체 이미지 경로를 저장하고 JavaScript를 통해 클릭 이벤트를 듣고 SRC 속성을 동적으로 전환하여 이미지 전환을 실현하는 것입니다. 이 기사는 일반적으로 사용되는 대화식 효과를 이해하고 마스터하는 데 도움이되는 자세한 코드 예제 및 설명을 제공합니다.

먼저 브라우저가 geolocationapi를 지원하는지 확인하십시오. 지원되는 경우 GetCurrentPosition ()을 호출하여 사용자의 현재 위치 좌표를 얻고 성공적인 콜백을 통해 위도 및 경도 값을 얻으십시오. 동시에 거부 허가, 위치의 이용 불가능 또는 시간 초과와 같은 오류 콜백 처리 예외를 제공하십시오. 또한 구성 옵션을 전달하여 높은 정밀도를 활성화하고 시간 초과 시간 및 캐시 유효성 기간을 설정할 수도 있습니다. 전체 프로세스에는 사용자 승인 및 해당 오류 처리가 필요합니다.

theBestatorReateAmulti-linestringInjavaScriptSingStisingStisingTemPlatalswithBackTicks, PRESERVEREAKENXACTLYASWRITENTINGSINGISINGSTINGISINGSTISIGINGSTISIGINSTEMPLATALSWITHTING.

Nuxt3의 구성 API 코어 사용에는 다음이 포함됩니다. 1. DefinePagemeta는 제목, 레이아웃 및 미들웨어와 같은 페이지 메타 정보를 정의하는 데 사용됩니다. 이는 직접 호출해야하며 조건부 진술서에 배치 할 수 없습니다. 2. ASSHEAD는 페이지 헤더 태그를 관리하고 정적 및 반응 형 업데이트를 지원하며 SEO 최적화를 달성하기 위해 DefinePagemeta와 협력해야합니다. 3. USEASYNCDATA는 비동기 데이터를 안전하게 얻고 로딩 및 오류 상태를 자동으로 처리하며 서버 및 클라이언트 데이터 수집 제어를 지원하는 데 사용됩니다. 4. UseFetch는 USEASYNCDATA 및 $ FETCH의 캡슐화로, 요청 키를 자동으로 유추하여 중복 요청을 피하십시오.

JavaScript에서 반복 간격을 만들려면 SetInterVal () 함수를 사용해야하며, 이는 지정된 밀리 초 간격으로 기능 또는 코드 블록을 반복적으로 실행합니다. 예를 들어, setInterVal (() => {console.log ( "2 초마다 실행");}, 2000)는 ClearInterval (IntervalId)에 의해 지워질 때까지 2 초마다 메시지를 출력합니다. 실제 애플리케이션에서 클럭, 설문 조사 서버 등을 업데이트하는 데 사용할 수 있지만 최소 지연 한도와 기능 실행 시간의 영향에주의를 기울이고 더 이상 메모리 누출을 피할 필요가없는 시간 간격을 정리하십시오. 특히 구성 요소가 제거되거나 페이지가 닫히기 전에이를 확인하십시오

이 기사는 javaScript에서 document.getElementByid ()를 통해 DOM 요소를 얻을 때 NULL을 반환하는 문제를 해결하는 것을 목표로합니다. 핵심은 스크립트 실행 타이밍 및 DOM 파싱 상태를 이해하는 것입니다. 태그를 올바르게 배치하거나 DomContentLoaded 이벤트를 사용하여 요소가 사용 가능한 경우 다시 시도하여 이러한 오류를 효과적으로 피할 수 있습니다.

이 튜토리얼은 JavaScript에서 두 개의 소수점으로 고정 된 두 가지 소수의 문자열로 숫자를 문자열로 포맷하는 방법에 대해 자세히 설명합니다. 정수도 "#.00"형식으로 표시 될 수 있습니다. 우리는 구문, 기능, 샘플 코드 및 리턴 유형이 항상 문자열 인 것과 같은 숫자의 구문, 기능, 샘플 코드 및 주요 포인트를 포함하여 숫자를 사용하는 데 중점을 둘 것입니다.

Clipboardapi의 WriteText 메소드를 사용하여 클립 보드에 텍스트를 복사하십시오. 보안 컨텍스트 및 사용자 상호 작용에서 호출되어야하며 최신 브라우저를 지원하며 기존 버전은 ExeccCommand로 다운 그레이드 될 수 있습니다.
