손으로 쓴 약속
-
Promise의 역할: 비동기 콜백 지옥의 문제를 해결하는 것,
즉 비동기 콜백 함수의 중첩된 쓰기 방법을 매개변수로 .then의 연쇄 쓰기 방법으로 변경하는 것입니다. -
Promise 작성 방법:
const p = new Promise((resolve, reject) => { resolve 및 reject 는 둘 다 함수입니다.resolve('successful data')를 실행하면 p.then(res => res)로 성공한 데이터를 얻습니다.
reject('failed data')를 실행하면 p.catch(err => err)로 실패한 데이터를 얻습니다.
})
const oP = new Promise((resolve, reject) => {
// Q1:.then中的回调函数,什么时候 执行?
// 执行 resolve() 函数,立即执行 .then 中的回调函数。
// 补充:若 resolve 有实参,那么 实参会作为 .then 的回调函数的 实参值。
// Q2: .catch 中的回调函数,什么时候 执行?
// 执行 reject() 函数,立即执行 .catch 中的 回调函数。
// 补充1:若 reject 有实参,那么 实参会作为 .catch 的回调函数的 实参值。
// 补充2:若 本函数执行了 reject 函数,而 实例对象没有 catch 的实例方法,则 会 报错。
// Q3:resolve 和 reject,能 都执行吗?
// A:resolve 和 reject 两者,只能执行其一。
setTimeout(() => {
resolve('resolve-then');
}, 2000);
});
oP.then((res) => {
console.log('then中的回调函数执行', res);
})
.catch((err) => {
console.log('catch中的回调函数执行', err);
})
.finally(() => {
console.log('finally');
});
요약하다:
- Promise 생성자의 유일한 매개변수는 함수입니다.
1) 이 함수는 즉시 실행됩니다
. 2) 함수 내에서 비동기 코드가 발생할 수 있습니다 . 3
) 이 함수 내에는 세 가지 상태가 있습니다.
실행.
2- 이행: 해결 기능이 실행되고 인스턴스 개체가 이동함을 나타냅니다.
3- 거부됨: 거부 기능이 실행되고 인스턴스 개체가 이동함을 나타냅니다. catch
4) 함수의 내부 상태는 보류 -> 이행 또는 보류 -> 거부에서 변경
// 위 두 프로세스가 발생하면 여기서 끝납니다;! ! 뒤집을 수 없는! !- Promise의 인스턴스 객체에는 세 가지 인스턴스 메서드가 있습니다.
1) oP.then(callback)
2) oP.catch(catchCallback)
3) oP.finally(finallyCallback)- oP
.then(res => { return xxx }) .then(res2 => { // 참고: res2의 값은 xxx }) // 이전 .then 콜백 함수의 반환 값을 다음으로 사용할 수 있습니다. 그런 다음 콜백 함수가 값을 받았습니다. // 참고: 반환 값은 일반 데이터이거나 Promise의 인스턴스 개체일 수 있습니다.