비동기 프로 그래 밍 - promise
9149 단어 자바 scriptecmascript6
정의
Promise 는 비동기 프로 그래 밍 의 해결 방안 으로 전통 적 인 해결 방법 인 리 셋 함수 에 비해 Promise 를 사용 하 는 것 이 더욱 합 리 적 이 고 강력 하 며 리 셋 함수 간 의 층 층 이 겹 쳐 지 는 것 을 피 할 수 있 고 코드 구조 도 더욱 뚜렷 하고 유지 하기 편리 하 다.Promise 는 대상 입 니 다. 그 에 게 서 비동기 작업 정 보 를 얻 을 수 있 습 니 다. 그 는 용기 이기 도 합 니 다. 그 안에 사건 이 끝 난 후에 진행 할 작업 이 포함 되 어 있 습 니 다.
특징
Promise 대상 은 두 가지 특징 이 있 습 니 다.
pending
(진행 중), resolved
(완료), rejected
(실패), 구체 적 으로 어떤 상태 에 있 는 지 는 비동기 작업 의 결과 에 의 해 결정 되 고 다른 어떠한 조작 도 이 상 태 를 바 꿀 수 없습니다.용법
Promise 는 인 스 턴 스 를 만 드 는 구조 함수 입 니 다.
var promise = new Promise(function(resolve,reject){
if(/ /){
resolve(val);
}else{
reject(val);
}
});
promise.then(function(val){
/ /
},function(error){
/ /
});
Promise 구조 함 수 는 하나의 함 수 를 매개 변수 로 받 습 니 다. 이 함 수 는 두 개의 매개 변수 resolve, reject 가 있 습 니 다. 이 두 개의 매개 변수 도 두 개의 함수 입 니 다. 자바 script 엔진 이 제공 되 므 로 스스로 실현 할 필요 가 없습니다.그 중에서 resolve 함수 의 역할 은 Promise 대상 의 상 태 를 '진행 중' 에서 '완료' 로 바 꾸 고 비동기 작업 이 성공 할 때 호출 하 며 비동기 작업 결 과 를 매개 변수 로 전달 하 는 것 이 상례
val
입 니 다.reject 함수 의 역할 은 Promise 대상 의 상 태 를 '진행 중' 에서 '실패' 로 바 꾸 고 비동기 작업 이 실 패 했 을 때 호출 하 며 작업 에 실패 한 오 류 를 매개 변수 로 전달 하 는 것 입 니 다.Promise 의 인 스 턴 스 는
then
방법 을 호출 할 수 있 습 니 다. then
방법 은 두 가지 함수 가 있 습 니 다. 첫 번 째 함 수 는 Promise 대상 상태 가 resosloved 로 변 했 을 때 실 행 된 함수 이 고 두 번 째 함 수 는 Promise 대상 상태 가 rejected 로 변 했 을 때 실 행 된 함수 입 니 다. 두 번 째 매개 변 수 는 선택 할 수 있 습 니 다.전형 적 인 예: 비동기 읽 기 파일
function readFileFn(filename){
return new Promise(function(resolve,reject){
fs.readfile(filename,function(err,data){
if(err){
reject(err);
}else{
resolve(data);
}
});
});
}
readFileFn("./test.txt").then(function(data){
console.log(data.toString());
// ...
},function(err){
console.log(err);
});
then
방법 은 체인 식 의 표기 법 을 사용 할 수 있다. 즉,promise.then(...).then(...).then(..)
구체 적 인 예:
var promise = new Promse(function(resolve,reject){
resolve(1); // Promise resolved, 1
});
promise.then(function(val){
console.log(val); // 1
return val*3;
}).then(function(val){
console.log(val); //3
return val*3;
}).then(function(val){
console.log(val); //9
});
4. Promise 대상 의 다른 방법
then
방법 에서 두 번 째 인 자 를 생략 한 다음 에 체인 호출 된 끝부분 에서 catch
방법 으로 비동기 조작 이나 then
방법의 오 류 를 포착 하 는 것 입 니 다.readFileFn("./test.txt").then(function(data){
console.log(data.toString());
// ...
}).catch(function(err){
console.log(err);
})
//
var promise = new Promise(function(resolve,reject){
reject(new Error("test"));
});
promise.then(function(val){
//...
}).catch(function(err){
console.log(err);
//..
});
var p = Promise.all([a,b,c]); //a,b,c Promise
p 최종 상 태 는 a, b, c 세 가지 로 결정 합 니 다.
1 >. a, b, c 의 상태 가 모두 resolved 일 때 p 의 상태 가 resolved 입 니 다. 이때 a, b, c 의 반환 값 은 하나의 배열 을 구성 하여 p 에 전달 하 는 반전 함수 입 니 다.
2 >. a, b, c 에 한 상태 가 있 을 때 reject, p 의 상 태 는 reject 입 니 다. 이때 reject 의 인 스 턴 스 반환 값 은 p 의 반전 함수 에 전 달 됩 니 다.
var promises = [1,2,3,4].map(function(id){
return readFileFn("./test"+id+".txt"); //readFileFn()
});
Promise.all(promises).then(function(val){
//...
}).catch(function(err){
//...
});
var promise = Promise.resolve($.ajax("./test.txt"));
Promise. resolve () 는 네 가지 유형의 인자 가 있 습 니 다.
1 >. Promise 인 스 턴 스, 그러면 함수 가 매개 변 수 를 수정 하지 않 고 그대로 돌아 갑 니 다.
2 >. 일반 대상 은 상례 와 같이 promise 대상 으로 되 돌아 갑 니 다.
3 >. 대상 이 아 닌 일반적인 변수, 예 를 들 어 'hello', 2 등 은 새로운 Promise 인 스 턴 스 를 되 돌려 줍 니 다. 상 태 는 resolved () 이 고 'hello' 는 매개 변수 로
then
에 게 전달 하 는 첫 번 째 방법 입 니 다.var p = Promise.resolve("hello");
p.then(function(val){ //
console.log(val); //hello
});
4 >. 인자 가 없 으 면 Resolved 상태의 Promise 대상 을 직접 되 돌려 줍 니 다.
done()
방법 이 있 습 니 다. 리 셋 체인 의 맨 끝 에 위치 하여 오 류 를 잡 는 데 사 용 됩 니 다.promise.then(function(){}).then(function(){}).catch(function(){}).done();
done()
의 차 이 는 일반적인 반전 함 수 를 매개 변수 로 받 아들 일 수 있 고 이 함 수 는 반드시 실 행 될 것 입 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.