Promise 함수 상세 정보

아시다시피 Promise는 비동기적인 조작을 편리하게 하는 데 사용되는 리셋 함수입니다.
손으로 코드를 찢으면 기억하기 쉽다
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()
    })

 
 

좋은 웹페이지 즐겨찾기