JS 인터뷰 프로세스 중 발생하는 비동기 문제
js의 매크로 작업 및 마이크로 작업
(권장 튜토리얼: js 튜토리얼)
면접 과정에서 기본적으로 면접관은 몇 가지 약속 질문을 할 것입니다. Promise는 주로 es6의 새로운 콘텐츠입니다. 비동기 문제를 최적화합니다. 필기시험에서는 Promise 및 setTimeout의 일부 실행 결과를 작성하라는 요청이 자주 나오므로 매크로 작업과 마이크로 작업의 개념을 알아야 합니다!
Promise를 사용하는 이유
이전 jquery 개발 프로젝트를 경험한 경우 다음과 같은 문제에 직면하게 됩니다. 콜백 지옥
$.ajax({ ... success: function() { ... $.ajax({ ... success: function() { } }) ... } })
원인 분석:
ajax 요청 중첩, 이유는 두 번째 요청이 의존하는 매개 변수입니다. 첫 번째 요청의 결과는 항상 중첩되어야 합니다. Ajax는 비동기식이므로 내부 결과를 외부에서 얻을 수 없습니다. 이런 종류의 코드로 인해 발생하는 문제는 디버깅이 어렵고, 결합도가 매우 높으며, 나중에 한 곳을 변경하는 것이 골치 아픈 일이 된다는 것입니다! 유지 관리가 매우 어렵고 코드 가독성도 떨어집니다.
Ajax를 최적화하기 위해 Promise가 도입되었습니다. Axios는 Promise 기반 요청 캡슐화 라이브러리입니다. 해당 하위 계층은 js 기본 XMLHTTPREQUEST.
promise().then().catch() 체인 호출을 기반으로 하며 더 많은 요청이 가능합니다. 약속().then().then().
매크로 작업은 무엇이고 마이크로 작업은 무엇인가요?
이 질문에 대해 생각할 때 JavaScript는 단일 스레드 스크립트 언어라는 것을 알아야 합니다. 즉, 해당 코드는 위에서 아래로 순차적으로만 실행될 수 있습니다. 한 번에 하나의 작업만 수행하기 위해 콜백 함수를 통해 비동기식을 달성합니다. js를 멀티스레드 언어로 디자인하면 어떨까요? 언어의 목적에 따라 특성이 결정됩니다. js는 원래 양식 유효성 검사 및 정기적인 판단과 DOM 요소 조작에 사용되었습니다. js에 여러 개의 스레드가 있고 하나는 DOM 요소를 수정하고 다른 하나는 삭제를 수행하는 경우 브라우저는 어떻게 해야 합니까? ? ? 그래서 언어의 목적에 따라 그 특성이 결정되는데, 브라우저는 멀티스레드이고, 메인 스레드 외에 다른 스레드도 존재합니다.
js 메인 프로그램이 실행되면 메인 프로그램의 동기화 코드가 먼저 실행됩니다. setTimeout이나 setInterval을 만나면 매크로 큐에 들어가고 promise의 콜백을 만나면 마이크로에 들어갑니다. 프로그램이 먼저 실행되고, 그 다음에는 nextTick 코드가 실행되고, 그 다음에는 마이크로 작업, 그리고 마지막으로 매크로 작업이 실행을 위해 대기열에 추가되며, 비동기 및 대기가 함께 사용됩니다. wait 뒤에는 promise 객체가 옵니다.
setTimeout(function(){console.log(1)},0); // 进入宏任务队列,最后执行宏任务 new Promise(function(resolve,reject){ console.log(2); //这句代码在promise构造器,同步执行 resolve(); // 执行了resolve再把任务放入微队列 }).then(function(){console.log(3) }).then(function(){console.log(4)}); process.nextTick(function(){console.log(5)}); console.log(6); // 主程序代码 // 输出2,6,5,3,4,1 // 下面这个进阶代码 setTimeout(function(){console.log(1)},0); // 进入宏任务排序为1 new Promise(function(resolve,reject){ console.log(2); // promise中执行完resolve()才会执行then(),而这里的resolve在宏任务里,执行完主程序代码后,还得先执行先进入宏队列中的程序 setTimeout(function(){resolve()},0) // 进入宏任务排序为2 }).then(function(){console.log(3) }).then(function(){console.log(4)}); process.nextTick(function(){console.log(5)}); console.log(6); // 输出的是 2 6 5 1 3 4
async의 실행 순서를 살펴보고 다시 wait
코드는 다음과 같습니다(예제).
async function async1() { console.log(1); await async2(); console.log(2); //这里要等await执行成功才会执行,进入微任务,排序1 } async function async2() { console.log(3); } console.log(4); //主程序代码 setTimeout(function() { console.log(5); }, 0) //进入宏任务,最后执行 async1(); new Promise(function(resolve) { console.log(6); // 这句同步执行 resolve(); }).then(function() { console.log(7); //进入微任务,排序2 }); console.log(8); // 主程序代码 // 输出的是 4,1,3,6,8,2,7,5
Summary
js는 단일 스레드 언어의 목적에 따라 특성이 결정됩니다. 비동기 작업은 이벤트 루프 메커니즘을 사용하여 동기 코드를 먼저 실행한 다음 마이크로 작업, 마지막으로 매크로 작업을 실행하며 두 작업 대기열의 작업이 대기열에 추가되어 순차적으로 실행됩니다. Wait 뒤에 있는 코드는 다음 코드를 실행하기 전에 Promise가 결과를 반환할 때까지 기다려야 합니다.
위 내용은 JS 인터뷰 프로세스 중 발생하는 비동기 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











얼굴 검출 및 인식 기술은 이미 상대적으로 성숙하고 널리 사용되는 기술입니다. 현재 가장 널리 사용되는 인터넷 응용 언어는 JS입니다. 웹 프런트엔드에서 얼굴 감지 및 인식을 구현하는 것은 백엔드 얼굴 인식에 비해 장점과 단점이 있습니다. 장점에는 네트워크 상호 작용 및 실시간 인식이 줄어 사용자 대기 시간이 크게 단축되고 사용자 경험이 향상된다는 단점이 있습니다. 모델 크기에 따라 제한되고 정확도도 제한됩니다. js를 사용하여 웹에서 얼굴 인식을 구현하는 방법은 무엇입니까? 웹에서 얼굴 인식을 구현하려면 JavaScript, HTML, CSS, WebRTC 등 관련 프로그래밍 언어 및 기술에 익숙해야 합니다. 동시에 관련 컴퓨터 비전 및 인공지능 기술도 마스터해야 합니다. 웹 측면의 디자인으로 인해 주목할 가치가 있습니다.

주식 분석을 위한 필수 도구: PHP 및 JS에서 캔들 차트를 그리는 단계를 배우십시오. 인터넷과 기술의 급속한 발전으로 주식 거래는 많은 투자자에게 중요한 방법 중 하나가 되었습니다. 주식분석은 투자자의 의사결정에 있어 중요한 부분이며 캔들차트는 기술적 분석에 널리 사용됩니다. PHP와 JS를 사용하여 캔들 차트를 그리는 방법을 배우면 투자자가 더 나은 결정을 내리는 데 도움이 되는 보다 직관적인 정보를 얻을 수 있습니다. 캔들스틱 차트는 주가를 캔들스틱 형태로 표시하는 기술 차트입니다. 주가를 보여주네요

PHP와 JS를 사용하여 주식 캔들 차트를 만드는 방법 주식 캔들 차트는 주식 시장에서 흔히 사용되는 기술 분석 그래픽으로 시가, 종가, 최고가 등의 데이터를 그려서 투자자가 주식을 보다 직관적으로 이해할 수 있도록 도와줍니다. 주식의 최저 가격. 이 기사에서는 특정 코드 예제와 함께 PHP 및 JS를 사용하여 주식 캔들 차트를 만드는 방법을 설명합니다. 1. 준비 시작하기 전에 다음 환경을 준비해야 합니다. 1. PHP를 실행하는 서버 2. HTML5 및 Canvas를 지원하는 브라우저 3

인터넷 금융의 급속한 발전으로 인해 주식 투자는 점점 더 많은 사람들의 선택이 되었습니다. 주식 거래에서 캔들 차트는 주가의 변화 추세를 보여주고 투자자가 보다 정확한 결정을 내리는 데 도움이 되는 일반적으로 사용되는 기술적 분석 방법입니다. 이 기사에서는 PHP와 JS의 개발 기술을 소개하고 독자가 주식 캔들 차트를 그리는 방법을 이해하도록 유도하며 구체적인 코드 예제를 제공합니다. 1. 주식 캔들 차트의 이해 주식 캔들 차트를 그리는 방법을 소개하기 전에 먼저 캔들 차트가 무엇인지부터 이해해야 합니다. 캔들스틱 차트는 일본인이 개발했습니다.

js와 vue의 관계: 1. 웹 개발의 초석인 JS 2. 프론트엔드 프레임워크로서의 Vue.js의 등장 3. JS와 Vue의 상호 보완적인 관계 4. JS와 Vue의 실제 적용 Vue.

Go 프레임워크는 Go의 내장 라이브러리를 확장하여 사전 구축된 기능(예: 웹 개발 및 데이터베이스 운영)을 제공하는 구성 요소 집합입니다. 널리 사용되는 Go 프레임워크에는 Gin(웹 개발), GORM(데이터베이스 운영) 및 RESTful(API 관리)이 포함됩니다. 미들웨어는 HTTP 요청 처리 체인의 인터셉터 패턴으로, 핸들러를 수정하지 않고 인증이나 요청 로깅 등의 기능을 추가하는 데 사용됩니다. 세션 관리는 사용자 데이터를 저장하여 세션 상태를 유지합니다. gorilla/sessions를 사용하여 세션을 관리할 수 있습니다.

JPA 란 무엇입니까? JDBC와 어떻게 다른가요? JPA(JavaPersistence API)는 ORM(객체 관계형 매핑)을 위한 표준 인터페이스로, 이를 통해 Java 개발자는 데이터베이스에 대해 직접 SQL 쿼리를 작성하지 않고도 친숙한 Java 객체를 사용하여 데이터베이스를 작동할 수 있습니다. JDBC(JavaDatabaseConnectivity)는 데이터베이스에 연결하기 위한 Java의 표준 API로, 개발자가 데이터베이스를 작동하려면 SQL 문을 사용해야 합니다. JPA는 JDBC를 캡슐화하고 객체 관계형 매핑을 위한 보다 편리하고 높은 수준의 API를 제공하며 데이터 액세스 작업을 단순화합니다. JPA에서 엔터티란 무엇입니까? 실재

동시 및 비동기 프로그래밍 동시 프로그래밍은 동시에 실행되는 여러 작업을 처리하며, 비동기 프로그래밍은 작업이 스레드를 차단하지 않는 일종의 동시 프로그래밍입니다. asyncio는 프로그램이 메인 스레드를 차단하지 않고 I/O 작업을 수행할 수 있도록 하는 Python의 비동기 프로그래밍용 라이브러리입니다. 이벤트 루프 asyncio의 핵심은 I/O 이벤트를 모니터링하고 해당 작업을 예약하는 이벤트 루프입니다. 코루틴이 준비되면 이벤트 루프는 I/O 작업을 기다릴 때까지 이를 실행합니다. 그런 다음 코루틴을 일시 중지하고 다른 코루틴을 계속 실행합니다. 코루틴 코루틴은 실행을 일시 중지하고 다시 시작할 수 있는 함수입니다. asyncdef 키워드는 코루틴을 만드는 데 사용됩니다. 코루틴은 I/O 작업이 완료될 때까지 기다리기 위해 wait 키워드를 사용합니다. 다음과 같은 asyncio의 기본 사항
