js promise
nodejs 가 빠르다 는 것 을 잘 알 고 있 습 니 다.왜 이렇게 빠 를 까요?그 이 유 는 node 가 기 다 려 야 할 사건 을 비동기 적 으로 처리 하여 코드 가 계속 실행 되 고 어 딘 가 에서 기다 리 지 않 아 도 되 기 때 문 입 니 다.그러나 좋 지 않 은 점도 있다.우리 가 리 셋 을 많이 할 때,예 를 들 어 이 리 셋 을 실행 하고 나 면 다음 리 셋 을 실행 해 야 한다.그 다음 에 다음 리 셋 을 실행 하면 층 층 이 새 겨 지고 코드 가 뚜렷 하지 않 으 며'리 셋 감옥'에 들 어가 기 쉽다.그러면 다음 의 예 를 들 기 쉽다.
async(1, function(value){
async(value, function(value){
async(value, function(value){
async(value, function(value){
async(value, function(value){
async(value, final);
});
});
});
});
});
이런 표기 법 은 사람 을 붕괴 시 킬 수 있다.그렇다면 이 문 제 를 해결 할 수 있 는 방법 이 있 을 까?아니면 다른 표기 법 이 있 을 까?정 답 은 있 습 니 다.es6 에서 새로 나 온 promise 대상 은 이미 es7 의 async await 가 이 문 제 를 해결 할 수 있 습 니 다.물론 promise 대상 을 먼저 소개 합 니 다.es7 의 async await 는 뒤의 글 에서 공유 할 것 입 니 다.다음은 앞으로 Promise 대상 을 소개 하 겠 습 니 다.소개
Promise,그 는 대상 입 니 다.비동기 작업 을 처리 하 는 데 사 용 됩 니 다.비동기 호출 을 쓸 때 더욱 우아 하고 아름 다 우 며 읽 기 편 합 니 다.말 그대로 약속,약속 이라는 뜻 이다.Promise 를 사용 한 후에 그 는 반드시 우리 에 게 대답 을 해 줄 것 이다.성공 하 든 실패 하 든 우리 에 게 대답 을 해 줄 것 이기 때문에 우 리 는 그 가 도망 갈 까 봐 걱정 하지 않 아 도 된다.하하.따라서 Promise 는 세 가지 상태 가 있 습 니 다.pending(진행 중),resolved(완료),rejected(실패).비동기 적 으로 돌아 오 는 구조 만 이 상 태 를 바 꿀 수 있다.그래서 promise 의 과정 은 보통 두 가지 밖 에 없다.pending->resolved 또는 pending->rejected.
promise 대상 은 리 셋 함 수 를 실행 하 는 데 자주 사용 되 는 then 방법 이 있 습 니 다.then 방법 은 두 개의 인 자 를 받 아들 입 니 다.첫 번 째 는 성공 적 인 resolved 의 리 셋 입 니 다.다른 하 나 는 실패 rejected 의 리 셋 입 니 다.두 번 째 실패 한 리 셋 인 자 는 선택 할 수 있 습 니 다.그리고 then 방법 에서 promise 대상 으로 돌아 갈 수 있 습 니 다.그러면 체인 호출 이 가능 합 니 다.다음 코드:
var Pro = function (time) {
// Promise
return new Promise(function (resolve, reject) {
console.log('123');
//
setTimeout(function () {
// Promise , then
resolve(' ');
}, time);
})
};
(function(){
console.log('start');
Pro(3000)
.then(function(data){
console.log(data);
return Pro(5000);})
.then(function(data){
console.log(data);
console.log('end');
})
})();
위의 코드 에서 Pro 변 수 를 정의 한 다음 에 익명 함 수 를 그 에 게 부여 합 니 다.함 수 는 Promise 대상 으로 돌아 간 다음 에 대상 에서 함 수 를 받 습 니 다.각각 resolve 와 reject 방법 을 매개 변수 로 전송 하고 setTimeOut 으로 비동기 요청 을 모 의 한 다음 resolve 방법 을 실행 하면 then 방법의 함 수 를 호출 합 니 다.결 과 는 다음 과 같다.3.Promise api
1、Promise.resolve()
2、Promise.reject()
3、Promise.prototype.then()
4、Promise.prototype.catch()
5.Promise.all()//모든 것 이 완성 되 었 습 니 다.
6.Promise.race()//하 나 를 완성 하면 됩 니 다.
1.Promise.resolve()의 역할 은 기 존 대상 을 Promise 대상 resolvedl 로 전환 합 니 다.Promise.resolve('test')==new Promise(resolve=>resolve('test'))
2.Promise.reject()도 Promise 대상 을 되 돌려 주 고 상 태 는 rejected 입 니 다.
3.then 방법 은 위 에서 이미 소 개 했 으 니 여 기 는 더 이상 소개 하지 않 겠 습 니 다.
4.catch():잘못된 반전 함수 가 발생 했 습 니 다.
5.Promise.all()은 모든 결과 가 완성 되 어야 then()의 성공 적 인 작업 을 수행 할 수 있 습 니 다.예 를 들 어:
let p1 =new Promise(function(resolve,reject){
resolve(1);
});
let p2 = new Promise(function(resolve,reject){
resolve(2);
});
let p3 = new Promise(function(resolve,reject){
resolve(3);
});
Promise.all([p1, p2, p3]).then(function (results) {
console.log('success:'+results);
}).catch(function(r){
console.log("error");
console.log(r);
});
마지막 출력:6.Promise.race()의 역할 도 여러 개의 인 스 턴 스 를 동시에 수행 합 니 다.하나의 인 스 턴 스 가 상 태 를 바 꾸 면 Promise 는 그 인 스 턴 스 가 바 꾼 상태 로 바 꿉 니 다.
예
var Pro = function () {
// Promise
return new Promise(function (resolve, reject) {
//
setTimeout(function () {
resolve(true);
}, 1000);
})
};
var Pro2 = function () {
// Promise
return new Promise(function (resolve, reject) {
//
setTimeout(function () {
resolve('Pro2 ');
}, 1000);
})
};
Pro().then(function(data){
var val = data;
console.log(val)
if (val) {
console.log(1111)
return Pro2()
}
}).then(function(data1){
console.log(data1)
})
출력:이렇게 하면 then 방법 으로 체인 호출 을 실현 할 수 있다.
이상 의 이 간단 한 이 야 기 는 js promise 에서 이 편 을 보면 충분 합 니 다.바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 여러분 들 이 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.