Promise - 비동기 적 해결 방안
Promise 는 대상 이자 구조 함수 이다.
function f1(resolve, reject) {
// ...
}
var p1 = new Promise(f1);
Promise 의 디자인 사상 은 비동기 작업 이 Promise 인 스 턴 스 를 되 돌려 주 는 것 입 니 다. Promise 인 스 턴 스 는 다음 단계 의 반전 함 수 를 지정 하 는 then 방법 이 있 습 니 다.
Promise 인 스 턴 스 는 세 가지 상태 가 있 습 니 다. 각각:
(pending)
(fulfilled)
(rejected)
fulfilled rejected resolved( )
,Promise (value), fulfilled。
,Promise (error), rejected。
var promise = new Promise(function (resolve, reject) {
// ...
if (/* */){
resolve(value);
} else { /* */
reject(new Error());
}
});
Promise.then()
Promise 인 스 턴 스 의 then 방법 은 리 셋 함 수 를 추가 하 는 데 사 용 됩 니 다.
then 방법 은 두 개의 반전 함 수 를 받 아들 일 수 있 습 니 다. 첫 번 째 는 비동기 작업 이 성공 할 때 (fulfilled 상태 로 변 함) 의 반전 함수 입 니 다. 두 번 째 는 비동기 작업 이 실 패 했 을 때 (rejected 로 변 함) 의 반전 함수 입 니 다. (이 매개 변 수 는 생략 할 수 있 습 니 다)일단 상태 가 바 뀌 면 상응하는 반전 함 수 를 호출한다.
var p1 = new Promise(function (resolve, reject) {
resolve(' ');
});
p1.then(console.log, console.error);
// " "
var p2 = new Promise(function (resolve, reject) {
reject(new Error(' '));
});
p2.then(console.log, console.error);
// Error:
위의 코드 에서 p1 과 p2 는 모두 Promise 인 스 턴 스 입 니 다. 그들의 then 방법 은 두 개의 반전 함수 에 연결 되 어 있 습 니 다. 성공 시의 반전 함수 console. log, 실패 시의 반전 함수 console. error (생략 할 수 있 습 니 다).p1 의 상태 가 성공 으로 바 뀌 고 p2 의 상태 가 실패 로 바 뀌 며 대응 하 는 리 셋 함 수 는 비동기 동작 으로 전 송 된 값 을 받 고 콘 솔 에서 출력 합 니 다.
아래 promise 의 서로 다른 문법 아래 의 다른 결 과 를 분석 하 다
f1().then(function () {
return f2();
}).then(f3); //f3 , f2 。
f1().then(function () {
f2();
return;
}).then(f3); //f3 undefined。
f1().then(f2())
.then(f3); //f3 , f2 。
f1().then(f2)
.then(f3); //f2 f1() 。
그림 불 러 오기
우 리 는 그림 의 불 러 오 기 를 Promise 대상 으로 썼 다.
var a = function () {
return new Promise(function (resolve, reject){
var image = new Image()
image.onload = resolve
image.onerror = reject
image.src = path
})
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.