ES6 지식 정리(二)---Promise
3944 단어 학습 노트
참고 자료: 1.Promise 사용법 분석 2.Promise 객체의 의미 및 기본 사용법 3.Promise 소개
Promise의 개념
이른바 Promise란 쉽게 말하면 하나의 용기로 그 안에 미래에 끝날 사건(보통 비동기적인 조작)의 결과가 보존되어 있다.문법적으로 Promise는 비동기적인 조작에 대한 정보를 얻을 수 있는 대상이다.
Promise 객체에는 다음과 같은 두 가지 특성이 있습니다.(1) 대상의 상태가 외부의 영향을 받지 않는다.Promise 객체는 Pending(진행 중), Resolved(완료됨, 일명 Fulfilled) 및 Rejected(실패) 등 세 가지 비동기식 작업을 나타냅니다.비동기 조작의 결과만 현재 어떤 상태인지 결정할 수 있으며, 그 어떠한 다른 조작도 이 상태를 바꿀 수 없다.프로미스라는 이름의 유래이기도 하다. 영어로는'약속'이라는 뜻으로 다른 수단을 바꿀 수 없다는 뜻이다.(2) 일단 상태가 바뀌면 다시 변하지 않고 언제든지 이 결과를 얻을 수 있다.Pending에서 Resolved로 변경하고 Pending에서 Rejected로 변경하는 것은 Pending에서 Rejected로 변경할 수 있는 두 가지 방법뿐입니다.이 두 가지 상황이 발생하기만 하면 상태는 응고되고 더 이상 변하지 않으며 이 결과를 계속 유지할 것이다.변경이 발생하더라도 프로미스 대상에 리셋 함수를 추가하면 바로 이 결과를 얻을 수 있습니다.이것은 이벤트 (Event) 와 완전히 다르다. 이벤트의 특징은 그것을 놓치면 다시 감청하면 결과를 얻을 수 없다는 것이다.Promise 대상이 있으면 비동기 조작을 동기화 조작의 절차로 표현할 수 있어 겹겹이 끼워 넣은 리셋 함수를 피할 수 있다.이 밖에 Promise 대상은 통일된 인터페이스를 제공하여 비동기적인 조작을 제어하는 것을 더욱 쉽게 한다.
Promise 사용 방법
Promise 구조 함수에는 함수인 매개변수가 포함됩니다.이 함수에는 또 두 개의 매개 변수인 Resolve와 Reject가 있다.
var p = new Promise(function(resolve, reject){
//
setTimeout(function(){
console.log(' ');
resolve(' ');
}, 2000);
});
주의!나는 단지 new의 대상일 뿐, 그것을 호출하지 않았다. 우리가 보낸 함수는 이미 집행되었다. 이것은 주의해야 할 세부 사항이다.그래서 우리는 Promise를 사용할 때 보통 하나의 함수에 패키지되어 있고 필요할 때 이 함수를 실행한다. 예를 들어 다음과 같다.
function runAsync(){
var p = new Promise(function(resolve, reject){
//
setTimeout(function(){
console.log(' ');
resolve(' ');
}, 2000);
});
return p;
}
runAsync()
이렇게 하면 연속적인 리셋은 다음과 같이 쓸 수 있다.
p.then(function(data){
console.log(data);
return runAsync2();
})
.then(function(data){
console.log(data);
return ' '; //
})
.then(function(data){
console.log(data);
});
기본적인 용법은 위와 같이 이후에 다른 새로운 이해가 있으면 별도로 보충한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
STL 학습노트(6) 함수 객체모방 함수는 모두pass-by-value이다 함수 대상은 값에 따라 전달되고 값에 따라 되돌아오기 때문에 함수 대상은 가능한 한 작아야 한다(대상 복사 비용이 크다) 함수 f와 대상 x, x 대상에서 f를 호출하면:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.