Promise 함수 상세 정보
2720 단어 생명이 멈추지 않다구덩이를 메우는 것이 그치지 않다
손으로 코드를 찢으면 기억하기 쉽다
var promise = new Promise(function (resolve, reject) {
setTimeout(resolve,1000)
})
promise
.then(
function () {
console.log(1)
return promise
}
)
우리가 자세히 분석합시다.
var promise = new Promise(function (resolve, reject) {
setTimeout(resolve,1000)
})
우리는 변수promise를 정의했다. 구조 함수 Promise의 실례이다. Promise는 두 개의 매개 변수를 받아들인다. 첫 번째는resolve이고 두 번째는reject이다.
우리는 두 번째 줄의 지연 1초가 리졸브를 촉발하는 것에서도 알 수 있듯이 수신된 매개 변수 리졸브는 함수일 것이다.그럼 질문이 왔습니다.이resolve 함수는 어디에서 전달됩니까?아래의 분해를 보십시오.
promise
.then(
function () {
console.log(1)
return promise
}
)
실례화된 대상(여기서는promise를 가리킨다)의 then 방법은 두 함수를 매개 변수로 받아들인다. 위의 코드에서 then 안의 function 부분은
프로미스가 받아들인 첫 번째 함수입니다.이것도 우리의 의문을 해결했다.
resolve 함수는 어디에서 옵니까?답:then 방법이 받아들인 첫 번째 함수.
문제2:rejecte 함수는 어디에서 왔습니까?답: then 방법의 두 번째 매개 변수지!
여기도 적어볼게요.
var promise = new Promise(function (resolve, reject) {
setTimeout(resolve,1000)
})
promise
.then(
function () {
console.log(1)
return promise
},
function () {
console.log(' then , ')
return promise
}
)
다음은 프로미스로 비동기 호출을 실현합니다.
var promise = new Promise(resolve => {
setTimeout(resolve,1000)
})
promise
.then(
function () {
console.log(1)
return new Promise(resolve => {
setTimeout(resolve,1000)
})
}
)
.then(function () {
console.log(2)
return new Promise(resolve => {
setTimeout(resolve,1000)
})
})
이 코드를 컨트롤러에 던져 출력 효과를 볼 수 있다.목적은 달성한 것이다.근데 문제가 좀 발견됐나요?
첫째, 우리는promise 변수를 성명하고 Promise 구조 함수로 실례화한 후에 자동으로 실행됩니다. 필요에 따라 불러오는 목적에 도달하지 않았습니까?
이 밤을 밤으로 삼다.내가 콘솔에 놓자마자 그는 1, 2를 출력했다.근데 제가 호출할 때 출력하고 싶어요. 이렇게 쓰면 안 되는 거 아니에요?
둘째: 매번then 방법에 우리는 return이라는 Promise의 실례화 대상이 필요합니다. 이렇게 쓰는 것은 매우 복잡하고 비대하지 않습니까?
그래서 현재 사용되고 있는promise는 모두 다음과 같은 형식의 것으로 상기 두 가지 문제를 잘 해결했습니다!
function fn() {
return new Promise(resolve => {
setTimeout(resolve,1000)
})
}
fn().then(function () {
console.log(1)
return fn()
}).then(function () {
console.log(2)
return fn()
})