javascript - Promise에서 반환되면 Promise가 즉시 실행되는 이유는 무엇입니까? 원리를 설명해주세요.
黄舟
黄舟 2017-05-19 10:10:29
0
3
828

코드는 다음과 같습니다

으아악
  1. Promise 객체가 반환된 다음 다음 단계에서 해결되는 이유는 무엇입니까?

  2. 두 번째 실행 체인이 두 번째 Promise인가요?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답(3)
Peter_Zhu

Promise의 아이디어는 모든 동기 및 비동기 코드를 비동기 코드로 처리하는 것입니다. then 메소드는 새로운 Promise(체인 호출)를 반환하고 then 메소드의 첫 번째 매개변수인 onfulfilled는 이전 Promise 객체의 비동기 호출이 완료된 후에 호출됩니다Promise(链式调用),then方法的第一个参数onfulfilled是在前一个Promise对象的异步调用完成之后调用的

    then(onfulfilled, onrejected){
            // 每个then方法都返回一个新的promise对象,实现链式调用

            return new Promise((resolve, reject)=>{

                let success = (value)=>{
                    // 这里执行onFulfilled,判断是否是promise对象并将返回结果作为参数传递到当前promise的reslove中
                    // 如果没有返回值,则默认返回原本的value值,这一步的处理并不是必须的
                    let result = onfulfilled(value) || value;
                    if (isThenable(result)){
                        result.then((value)=>{
                            resolve(value);
                        }, (value)=>{
                            reject(value);
                        });
                    }else {
                        resolve(result);
                    }
                }

                let error = (value)=>{
                    let result = onrejected(value) || value;
                    resolve(result);
                }
                
                // 当调用then方法的那个promise对象onfulfilled时调用success,执行上面的操作
                switch(this.status){
                    case PENDING:
                        this.onfulfilled = success;
                        this.onrejected = error;
                        break;
                    case FULFILLED:
                        success(this.value);
                        break;
                    case REJECTED:
                        error(this.reason);
                        break;
                }
                
            })
        }

这里还是牵扯到Promise 으아악

여기에는 Promise 생성자 내부에 몇 가지 구현이 포함되어 있습니다. 여기 포털이 도움이 되기를 바랍니다.
阿神

저는 큰 사람이 아닙니다-_-제 관점을 설명하겠습니다.
Then 체인 호출은 이전 then의 반환 값을 매개 변수로 사용합니다. Promise의 then 함수는 반환 값에 대해 Promise 객체 처리를 수행하도록 내부적으로 구현됩니다. 예를 들어 기본 데이터 유형은 Promise를 통해 직접 반환됩니다. .resolve(data) Promise 객체가 Promise 객체인 경우 해당 해결 함수를 실행하여 다음 then 함수를 트리거합니다.

PHPzhong

이 실행 체인을 다음과 같이 분해할 수 있습니다.

으아아아

setTimeout을 사용하여 retPromise(str) 함수를 지연된 반환으로 설정할 수도 있습니다. 이게 더 잘 먹히네요

으아아아
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!