Promiseの個人的な理解

4089 ワード

ECMAscript 6原生はPromiseの対象を提供しました.
Promiseオブジェクトは、将来発生するイベントを表し、非同期操作のメッセージを伝達する.
Promiseの特徴:
1、対象の状態は外部の影響を受けない.Promiseオブジェクトは非同期操作を表しています.3つの状態があります.
  • ペンディング:初期状態は成功や失敗の状態ではありません.
  • fulfilled:操作が成功したことを意味する.
  • rejeced:操作が失敗したことを意味します.
  • 非同期操作の結果のみ、現在の状態はどの状態かを決定できます.他の操作はこの状態を変えることができません.これもPromiseという名前の由来ですが、英語では「承諾」という意味で、他の手段は変えられないという意味です.
    2、一旦状態が変わったら、二度と変わらない.いつでもこの結果を得ることができる.Promiseオブジェクトの状態が変わるのは、PendingからReolvedに変化することとPendingからRejectiedに変化することしかできません.この二つの状況が発生すれば、状態が固まり、これ以上変わることなく、ずっとこの結果を維持します.変更が発生したとしても、Promiseオブジェクトに対してコールバック関数を追加すると、すぐにこの結果が得られます.イベントとは全く違って、イベントの特徴は、それを見逃してしまったら、また傍聴しても結果が得られないということです.
    簡単なpromiseの例
      let promiser = new Promise((resolve, reject) => {
            resolve(0)
        })
        promiser.then(res => {
            console.log(res)
        }).catch(err => {
            console.log(err)
        })
    
    //resolve=====>      .then()     
    //rejected======>      .catch()     
    
                 0
    Promiseのチェーン呼び出し
          //   
            function promise1(status){
                return new Promise((resolve, reject) => {
                    if(status) {
                        console.log(' 1 promise  ');
                        resolve(' 1 promise      '); // axios
                    }
                    if(!status) {
                        console.log(' 1 promise  ');
                        reject(' 1 promise      ')
                    }
                })
            }
    
            function promise2(status){
                return new Promise((resolve, reject) => {
                    if(status) {
                        console.log(' 2 promise  ');
                        resolve(' 2 promise      ')
                    }
                    if(!status) {
                        console.log(' 2 promise  ');
                        reject(' 2 promise      ')
                    }
                })
            }
    
            function promise3(status){
                return new Promise((resolve, reject) => {
                    if(status) {
                        console.log(' 3 promise  ');
                        resolve(' 3 promise      ')
                    }
                    if(!status) {
                        console.log(' 3 promise  ');
                        reject(' 3 promise      ')
                    }
                })
            }
    
            function promise4(status){
                return new Promise((resolve, reject) => {
                    if(status) {
                        console.log(' 4 promise  ');
                        resolve(' 4 promise      ')
                    }
                    if(!status) {
                        console.log(' 4 promise  ');
                        reject(' 4 promise      ')
                    }
                })
            }
            promise1(true)
            .then(response => {   //  1 
                console.log(response)
                //     ,       2 promise
                return promise2(true) //    return ,    return     .then()        ,   .then(response)    response   Undefined,        .then()         return  promise    
            })
            .then(response => {  //  2 
                console.log(response)
                return promise4(true)
            })
            .then(response => {
                console.log(response)
            })
            .catch(error => {
                console.log(error)
            })
    all方法の例
       // all  ,    promise      (    resolve),    then  ,        (reject)   ,    catch
            Promise.all([promise1(true), promise2(true), promise3(true)]).then(response => {
                console.log('      ');
            }).catch(error => {
                console.log('       ');
            })
    race方法の例
    // race  ,       ,        resolve(  ),      。
            //      :rece,        resolve,     ,    then。  ,        reject,      
            Promise.race([promise1(false), promise2(true), promise3(true)]).then(response => {
                console.log('  ');
            }).catch(error => {
                console.log('   ');
            })