찾다
웹 프론트엔드프런트엔드 Q&A약속은 es6을 기반으로합니까?

약속은 es6을 기반으로합니까?

Nov 03, 2022 pm 07:20 PM
es6promise

그렇습니다. Promise는 비동기 작업의 최종 완료 또는 실패를 나타내는 ECMAScript 6의 새로운 참조 유형입니다. Promise는 비동기 프로그래밍 호출 코드에서 지나치게 복잡한 논리 작성 문제를 해결합니다. 네트워크 요청이 매우 복잡할 때 콜백 지옥이 발생합니다. 이런 식으로 이러한 코드를 함께 작성하면 매우 복잡해 보이고 읽기에 도움이 되지 않습니다. Promises를 사용하면 코드가 더욱 아름답고 우아해 보입니다.

약속은 es6을 기반으로합니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.

ECMAScript 6에는 Promises/A+ 사양, 즉 Promise 유형에 대한 완전한 지원이 추가되었습니다. Promise는 출시된 후 엄청난 인기를 얻었으며 지배적인 비동기 프로그래밍 메커니즘이 되었습니다. 모든 최신 브라우저는 ES6 기대치를 지원하며 다른 많은 브라우저 API는 기대치를 기반으로 합니다.

Promise는 비동기 작업의 최종 완료 또는 실패를 나타내는 ECMAScript 6의 새로운 참조 유형입니다.

1. Promise 함수란? 비동기 프로그래밍 호출 코드 로직이 너무 복잡하게 작성되는 문제를 해결하기 위한 것입니다. 따라서 이러한 코드를 함께 작성하면 콜백 지옥이 발생합니다. Promise를 사용하면 코드가 더 아름답고 우아해 보일 것입니다.

2. Promise의 세 가지 상태

우선, 개발에 비동기 작업이 있을 때, 비동기 작업에 대한 약속을 래핑할 수 있습니다 비동기 작업 이후에는 세 가지 상태가 있습니다

pending:等待状态,比如正在进行网络请求,或者定时器没有到时间。
fulfill:满足状态,当我们主动回调了resolve时,就处于该状态,并且会回调.then()
reject:拒绝状态,当我们主动回调了reject时,就处于该状态,并且会回调.catch()


3. 구현

1, 그리고 catch

1 상태의 함수는 동기식입니다. 즉시 실행

2. Promise 객체에 비동기 작업이 없고 then 메서드나 catch가 즉시 실행되더라도 여기 두 메서드는 이벤트 큐에 추가되어 실행을 기다릴 수 있습니다

//参数 函数(resolve,reject)
    new Promise((resolve, reject) => {
        setTimeout(() => {
            //请求成功的时候调用resolve
            resolve('22222')
            //请求失败的时候调用reject
            reject('error message')
        }, 1000)
    }).then((data) => { //请求成功处理函数
        console.log(data)
    }).catch((err) => { //请求失败处理函数
        console.log(err)
    })
2. 상태 확인

1. 보류 상태 처리 기능에서 포착되지 않은 오류가 발생하면 상태는 보류 상태가 되며 바로 거부 상태가 되며 catach
var pro = new Promise((resolve, reject) => {
            throw new Error("123");

            // try{
            //     throw new Error("123"); 
            // } catch(e) {}

            resolve(12);
            reject(34);
        })

        // pro.then(data => {
        //     console.log(data);
        // }, err => {
        //     console.log(err);
        // })


        console.log(pro);
        

        pro.then(data => {
            console.log(data);
            
        })

        pro.catch(data => {
            console.log(data);
            
        })

3. 그리고 wait

1. Promise 사용:

const makeRequest = () =>
        getJSON().then(data => {
            console.log(data)
            return "done"
        })

    makeRequest()
2. 비동기 사용:

async 및 wait는 ES7에서 제안됩니다.

비동기의 역할: 함수 반환 값에서 Promise 개체 생성을 단순화합니다. ​​
일반적으로 async는 함수 끝에 작성합니다. 이전에는 수정된 함수의 반환 값이 Promise 객체여야 했습니다. 일부 특별한 경우에만 Promise 객체가 수동으로 반환됩니다.
기능: Promise와 같은 비동기 문제를 해결하지만 비동기 코드를 동기 코드와 동일하게 만든다는 장점이 있습니다!!

참고: 동기 메서드에서는 반환 값을 통해 결과를 얻고, 비동기 메서드에서는 결과를 얻습니다. 콜백 함수를 통해. async 및 wait 사용을 위한 기본 구문
:

일반 함수 앞에 async를 추가하는 것입니다. 호출은 일반 함수와 동일합니다.

  • Async는 일반적으로 wait와 함께 사용됩니다

  • await 뒤에는 비동기 함수

  • const makeRequest = async () => {
     // await getJSON()表示console.log会等到getJSON的promise成功reosolve之后再执行。
            console.log(await getJSON)
            return "done"
        }
    
        makeRequest()

    3에서 Promise 개체를 사용해야 합니다. 차이점

1. 함수 앞에 추가 aync 키워드가 있습니다. Await 키워드는 aync로 정의된 함수 내에서만 사용할 수 있습니다. 비동기 함수는 암시적으로 약속을 반환하며 약속의 확인 값은 함수 반환 값입니다. (예제에서 reosolve 값은 "done" 문자열입니다.) 2. 가장 바깥쪽 코드는 비동기 함수 내에 있지 않기 때문에 Wait를 사용할 수 없습니다.

4.promise method

var r1 = new Promise((resolve,reject) => {
            setTimeout(function(){
                resolve("我是第一个请求");
            },1000)
        })
        var r2 = new Promise((resolve,reject) => {
            setTimeout(function(){
                resolve("我是第二个请求");
            },3000)
        })
        var r3 = new Promise((resolve,reject) => {
            setTimeout(function(){
                resolve("我是第三个请求");
            },4000)
        })
        var r4 = new Promise((resolve,reject) => {
            setTimeout(function(){
                resolve("我是第四个请求");
            },500)
        })

1.all method다음 단계로 진행하기 전에 두 개 이상의 요청이 성공적으로 반환될 때까지 기다려야 하는 경우가 있습니다. 콜백

Promise.all([r1,r2,r3,r4]).then(data => {
            console.log(data);
            
        })

2.race method

의 다음 단계에서는 요청이 동시에 전송되며, 먼저 돌아온 사람이 누구의 데이터를 사용하게 됩니다.

Promise.race([r1,r2,r3,r4]).then(data => {
           console.log(data);
           
       })

Five.promise 캡슐화 Ajax 케이스

<script>
       function toData(obj) {
               
               // 声明一个数组 来装每一组的数据
               var arr = [];
               if(obj !== null) {
                   for(var key in obj) {
                       let str = key + "=" + obj[key];
                       arr.push(str);
                   }
                   return arr.join("&");
               }
       }

       function ajax(obj) {
           return new Promise(function(resolve, reject) {
               // 给ajax所需要的参数设置默认值
               obj.type = obj.type || "get";
               obj.async = obj.async|| "true";
               obj.dataType = obj.dataType || "json";
               obj.data = obj.data || null;

               // 开始发送ajax请求
               var xhr;

               if(window.XMLHttpRequest) {
                   xhr = new XMLHttpRequest();
               } else {
                   // IE低版本的浏览器
                   xhr = new ActiveXObject("Microsoft.XMLHttp");
               }

               // 判断是post请求 还是get请求
               if(obj.type === "post") {
                   xhr.open(obj.type, obj.url, obj.async);
                   // 设置请求头
                   xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

                   xhr.send(toData(obj.data));

               } else {
                   var url = obj.url + "?" + toData(obj.data);
                   xhr.open(obj.type, url, obj.async);
                   xhr.send();
               }

               // 处理响应体
               xhr.onreadystatechange = function() {

                   if(xhr.readyState == 4) {
                       if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
                           resolve(JSON.parse(xhr.responseText));

                       } else {
                           reject(xhr.status);
                       }
                   }
               }
           })
       }

       ajax({
           url : "./data.php",
           data : {
               name : "jack",
               age : 16
           }
       }).then(res => {
           console.log(res);
           
       }, err => {
           console.log(err);
           
       })
   
   </script>

[관련 권장사항: javascript 비디오 튜토리얼,

웹 프론트엔드

]

위 내용은 약속은 es6을 기반으로합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
CSS : 같은 DOM에서 여러 ID를 사용할 수 있습니까?CSS : 같은 DOM에서 여러 ID를 사용할 수 있습니까?May 14, 2025 am 12:20 AM

아니요, 당신은 uplemultipleidsinthesamedom.1) idsmustbeuniqueperhtmlspecification, andusingduplicatescancauseSconsistentBrowserBehavior.2) useclassesforstylingmultipleelements, attributesectorscendats eftibutes 및 descenderfortrecture

HTML5의 목표 :보다 강력하고 액세스 가능한 웹 생성HTML5의 목표 :보다 강력하고 액세스 가능한 웹 생성May 14, 2025 am 12:18 AM

html5aimstoenhancewebcapabilities, MakingItmoredynamic, Interactive, and Accessible.1) itsupportsmultimediaelementslikeand, 2) SemanticlementsImpreveAcessibilityandCodeReardability.3) 특징적인 부대, 응답 Whebappl

HTML5의 중요한 목표 : 웹 개발 및 사용자 경험 향상HTML5의 중요한 목표 : 웹 개발 및 사용자 경험 향상May 14, 2025 am 12:18 AM

html5aimstoenhancewebdevelopmentandusereerexperiencetroughsemanticstructure, multimediaintegration 및 performanceimprovements

html5 : 안전합니까?html5 : 안전합니까?May 14, 2025 am 12:15 AM

html5isnotinherentlyinsecure, buttsfeaturescanleadtosecurityRiskSifMisusedOrimProperSimplemented.1) USETHETSANDTRIFICEINIFRAMESTOCONTROLEMEDEDEDENDENDENDENDENDENDENDENDENDENTANDENTANDERVULNERABILITIESLIKECLIKEJACKINGINITIONSLIKECLIKETHOING.2) 피난처에 대한 비난을 피하십시오

이전 HTML 버전과 비교할 때 HTML5 목표이전 HTML 버전과 비교할 때 HTML5 목표May 14, 2025 am 12:14 AM

html5aimedtoenhanceWebDevelopmentByIntrictionmanticalLiticalEmentements, nativeMultiMediasupport, 개선 된 정보 및 및 플린 컨테이션, html4andxhtml.1) itintructed -temantictagsiver ,, 개선 부양

CSS : ID 선택기를 사용하는 것이 좋지 않습니까?CSS : ID 선택기를 사용하는 것이 좋지 않습니까?May 13, 2025 am 12:14 AM

ID 선택기를 사용하는 것은 본질적으로 CSS에서 나쁘지 않지만주의해서 사용해야합니다. 1) ID 선택기는 고유 한 요소 또는 JavaScript 후크에 적합합니다. 2) 일반적인 스타일의 경우 클래스 선택기가보다 유연하고 유지 관리 가능하므로 사용해야합니다. ID 및 클래스 사용의 균형을 유지함으로써보다 강력하고 효율적인 CSS 아키텍처를 구현할 수 있습니다.

HTML5 : 2024 년 목표HTML5 : 2024 년 목표May 13, 2025 am 12:13 AM

HTML5'SGOALSIN2024FOCUSONERFINEMENTANDENDEND 및 최적화, NOTNEWFEATURES.1) 최적화 된 렌더링을 향상시킵니다

HTML5가 개선하려고했던 주요 영역은 무엇입니까?HTML5가 개선하려고했던 주요 영역은 무엇입니까?May 13, 2025 am 12:12 AM

html5aimedtoimprovewebdevelopmentinfourkeyareas : 1) Multimediasupport, 2) Semantictructure, 3) Formcapabilities, 및 4) OfflineandStorageOptions.1) Html5intrudceDandlements, Simplifying MediaembeddingandenUsereXperxpercepence.2) NewSmanticallementalmentalmentementlementmentmentmentmentmentmentmentmentmentmentmentmentmentmentmentmentmentmentalments

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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