이제 js promise 사용에 대해 간략하게 설명하겠습니다. 매우 좋은 참고 가치를 갖고 있으며 이 글을 읽고 나면 이해하게 될 것입니다. 그것이 모두에게 도움이 되기를 바랍니다.
1. 배경
nodejs가 매우 빠르다는 것은 누구나 알고 있습니다. 왜 그렇게 빠른가요? 그 이유는 노드가 기다려야 하는 이벤트를 처리하기 위해 비동기 콜백을 사용하기 때문입니다. 특정 이벤트를 기다리지 않고 실행합니다. 하지만 단점도 있습니다. 예를 들어 이 콜백을 실행한 후 다음 콜백을 실행해야 하며 이로 인해 중첩 및 불분명한 코드가 발생하므로 매우 어렵습니다. . "콜백 감옥"에 들어가기 쉽습니다. 다음과 같은 예가 쉽게 발생할 수 있습니다:
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 wait가 이 문제를 해결할 수 있습니다. 물론 여기서는 promise 객체를 먼저 소개하고 es7의 async wait는 다음 기사에서 공유하겠습니다. Promise 객체는 아래에 소개됩니다.
2. 소개
Promise는 비동기 작업을 처리하는 데 사용되는 개체입니다. 이를 통해 비동기 호출을 더 우아하고, 더 아름답고, 읽기 쉽게 작성할 수 있습니다. 이름에서 알 수 있듯이 Promise를 뜻하는데, Promise를 사용한 후에는 성공이든 실패든 반드시 우리에게 답장을 해준다는 뜻이므로 실행에 대한 걱정은 하지 않아도 된다. 떨어져, 하하. 따라서 Promise에는 보류(진행 중), 해결(완료), 거부(실패)의 세 가지 상태가 있습니다. 비동기적으로 반환된 구조만 상태를 변경할 수 있습니다. 따라서 일반적으로 Promise 프로세스는 보류->해결 또는 보류->거부라는 두 가지 프로세스만 있습니다.
Promise 개체에는 콜백 함수를 실행하는 데 더 일반적으로 사용되는 then 메서드가 있습니다. then 메서드는 두 개의 매개변수를 받습니다. 첫 번째는 성공적인 해결 콜백이고, 다른 하나는 실패한 거부 콜백입니다. 콜백. 매개변수는 선택사항입니다. 그리고 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 객체를 반환한 다음 객체에서 함수를 수신하고 확인 및 전달합니다. 메서드를 각각 매개변수로 거부하고 setTimeOut을 사용하여 비동기 요청을 시뮬레이션하면 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 객체로 변환하는 함수입니다. 또한 Promise 객체를 반환하면 상태가 거부됩니다.
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()의 기능은 하나의 인스턴스가 상태를 변경하는 한 동시에 여러 인스턴스를 실행하는 것입니다.
4. 예시 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 메소드를 사용하여 체인 호출을 구현할 수 있습니다.
위 내용은 제가 여러분을 위해 정리한 내용입니다. 앞으로 도움이 되길 바랍니다.
관련 기사:
JavaScript 중재자 패턴(자세한 튜토리얼) jQuery에서 Dom 요소를 사용하는 방법은 무엇입니까? Vue에서 이벤트 반응 진행률 표시줄 구성 요소를 구현하는 방법
위 내용은 js의 Promise에 대한 지식 포인트에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!