그렇습니다. Promise는 비동기 작업의 최종 완료 또는 실패를 나타내는 ECMAScript 6의 새로운 참조 유형입니다. Promise는 비동기 프로그래밍 호출 코드에서 지나치게 복잡한 논리 작성 문제를 해결합니다. 네트워크 요청이 매우 복잡할 때 콜백 지옥이 발생합니다. 이런 식으로 이러한 코드를 함께 작성하면 매우 복잡해 보이고 읽기에 도움이 되지 않습니다. Promises를 사용하면 코드가 더욱 아름답고 우아해 보입니다.
이 튜토리얼의 운영 환경: 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. 보류 상태 처리 기능에서 포착되지 않은 오류가 발생하면 상태는 보류 상태가 되며 바로 거부 상태가 되며 catachvar 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

在es6中,可以利用“Array.isArray()”方法判断对象是否为数组,若判断的对象是数组,返回的结果是true,若判断对象不是数组,返回的结果是false,语法为“Array.isArray(需要检测的js对象)”。

es6中遍历跟迭代的区别是:遍历强调的是要把整个数据依次全部取出来,是访问数据结构的所有元素;而迭代虽然也是依次取出数据,但是并不保证取多少,也不保证把所有的数据取完,是遍历的一种形式。

在es6中,可用Object对象的is()方法来判断两个对象是否相等,该方法检测两个变量的值是否为同一个值,判断两个对象的引用地址是否一致,语法“Object.is(对象1,对象2)”;该方法会返回布尔值,若返回true则表示两个对象相等。

转换方法:1、利用“+”给数字拼接一个空字符,语法“数字+""”;2、使用String(),可把对象的值转换为字符串,语法“String(数字对象)”;3、用toString(),可返回数字的字符串表示,语法“数字.toString()”。

sort排序是es6中的;sort排序是es6中用于对数组的元素进行排序的方法,该方法默认不传参,按照字符编码顺序进行排序,排序顺序可以是字母或数字,并按升序或降序,语法为“array.sort(callback(a,b))”。

在es6中,assign用于对象的合并,可以将源对象的所有可枚举属性复制到目标对象;若目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性,语法为“Object.assign(...)”

改变方法:1、利用splice()方法修改,该方法可以直接修改原数组的内容,语法为“数组.splice(开始位置,修改个数,修改后的值)”;2、利用下标访问数组元素,并重新赋值来修改数组数据,语法为“数组[下标值]=修改后的值;”。

在es6中,import as用于将若干export导出的内容组合成一个对象返回;ES6的模块化分为导出与导入两个模块,该方法能够将所有的导出内容包裹到指定对象中,语法为“import * as 对象 from ...”。


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

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

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
